{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3349f94e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>x7</th>\n",
       "      <th>x8</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-18 09:44:28.244</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>107</td>\n",
       "      <td>206</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"484\"}</td>\n",
       "      <td>2023-07-11 13:42:21.469</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-15 07:49:53.040</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-16 00:36:55.688</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>17</td>\n",
       "      <td>366</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-16 07:15:51.442</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>92</td>\n",
       "      <td>383</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap               common_ts  x1  x2  \\\n",
       "0     0   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-18 09:44:28.244   4   0   \n",
       "1     1   26  {\"key3\":\"67804\",\"key2\":\"484\"} 2023-07-11 13:42:21.469   4   0   \n",
       "2     2    8                        unknown 2023-07-15 07:49:53.040   4   0   \n",
       "3     3   11                        unknown 2023-07-16 00:36:55.688   1   3   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-16 07:15:51.442   0   3   \n",
       "\n",
       "   x3   x4   x5  x6  x7  x8  target  \n",
       "0  41  107  206   1   0   1       0  \n",
       "1  41   24  283   4   8   1       0  \n",
       "2  41   71  288   4   7   1       0  \n",
       "3  41   17  366   1   6   1       0  \n",
       "4  41   92  383   4   8   1       0  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "train_data = pd.read_csv('用户新增预测挑战赛公开数据/train.csv')\n",
    "test_data = pd.read_csv('用户新增预测挑战赛公开数据/test.csv')\n",
    "\n",
    "train_data['common_ts'] = pd.to_datetime(train_data['common_ts'], unit='ms')\n",
    "test_data['common_ts'] = pd.to_datetime(test_data['common_ts'], unit='ms')\n",
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "491a8a0b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>484.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     0      1        2    3    4    5    6    7    8\n",
       "0  0.0  650.0  67804.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       "1  0.0  484.0  67804.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       "2  0.0    0.0      0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       "3  0.0    0.0      0.0  0.0  0.0  0.0  0.0  0.0  0.0\n",
       "4  0.0  650.0  67804.0  0.0  0.0  0.0  0.0  0.0  0.0"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def udmap_onethot(d):\n",
    "    v = np.zeros(9)\n",
    "    if d == 'unknown':\n",
    "        return v\n",
    "    \n",
    "    d = eval(d)\n",
    "    for i in range(1, 10):\n",
    "        if 'key' + str(i) in d:\n",
    "            v[i-1] = d['key' + str(i)]\n",
    "            \n",
    "    return v\n",
    "\n",
    "train_udmap_df = pd.DataFrame(np.vstack(train_data['udmap'].apply(udmap_onethot)))\n",
    "test_udmap_df = pd.DataFrame(np.vstack(test_data['udmap'].apply(udmap_onethot)))\n",
    "\n",
    "# train_udmap_df.columns = ['key' + str(i) for i in range(1, 10)]\n",
    "# test_udmap_df.columns = ['key' + str(i) for i in range(1, 10)]\n",
    "# ['key' + str(i) for i in range(1, 10)]：这一部分使用了列表解析，\n",
    "# 生成了一个包含字符串'key1'到'key9'的列表，即['key1', 'key2', 'key3', 'key4', 'key5', 'key6', 'key7', 'key8', 'key9']\n",
    "\n",
    "train_udmap_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "1598abef",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_udmap_df.columns = ['key' + str(i) for i in range(1, 10)]\n",
    "test_udmap_df.columns = ['key' + str(i) for i in range(1, 10)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "20e03ee6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>key3</th>\n",
       "      <th>key4</th>\n",
       "      <th>key5</th>\n",
       "      <th>key6</th>\n",
       "      <th>key7</th>\n",
       "      <th>key8</th>\n",
       "      <th>key9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>484.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key1   key2     key3  key4  key5  key6  key7  key8  key9\n",
       "0   0.0  650.0  67804.0   0.0   0.0   0.0   0.0   0.0   0.0\n",
       "1   0.0  484.0  67804.0   0.0   0.0   0.0   0.0   0.0   0.0\n",
       "2   0.0    0.0      0.0   0.0   0.0   0.0   0.0   0.0   0.0\n",
       "3   0.0    0.0      0.0   0.0   0.0   0.0   0.0   0.0   0.0\n",
       "4   0.0  650.0  67804.0   0.0   0.0   0.0   0.0   0.0   0.0"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_udmap_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "744d56b5",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = pd.concat([train_data, train_udmap_df], axis=1)\n",
    "test_data = pd.concat([test_data, test_udmap_df], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "78285c41",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>...</th>\n",
       "      <th>target</th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>key3</th>\n",
       "      <th>key4</th>\n",
       "      <th>key5</th>\n",
       "      <th>key6</th>\n",
       "      <th>key7</th>\n",
       "      <th>key8</th>\n",
       "      <th>key9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-18 09:44:28.244</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>107</td>\n",
       "      <td>206</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"484\"}</td>\n",
       "      <td>2023-07-11 13:42:21.469</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>484.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-15 07:49:53.040</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-16 00:36:55.688</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>17</td>\n",
       "      <td>366</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-16 07:15:51.442</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>92</td>\n",
       "      <td>383</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap               common_ts  x1  x2  \\\n",
       "0     0   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-18 09:44:28.244   4   0   \n",
       "1     1   26  {\"key3\":\"67804\",\"key2\":\"484\"} 2023-07-11 13:42:21.469   4   0   \n",
       "2     2    8                        unknown 2023-07-15 07:49:53.040   4   0   \n",
       "3     3   11                        unknown 2023-07-16 00:36:55.688   1   3   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-16 07:15:51.442   0   3   \n",
       "\n",
       "   x3   x4   x5  x6  ...  target  key1   key2     key3  key4  key5  key6  \\\n",
       "0  41  107  206   1  ...       0   0.0  650.0  67804.0   0.0   0.0   0.0   \n",
       "1  41   24  283   4  ...       0   0.0  484.0  67804.0   0.0   0.0   0.0   \n",
       "2  41   71  288   4  ...       0   0.0    0.0      0.0   0.0   0.0   0.0   \n",
       "3  41   17  366   1  ...       0   0.0    0.0      0.0   0.0   0.0   0.0   \n",
       "4  41   92  383   4  ...       0   0.0  650.0  67804.0   0.0   0.0   0.0   \n",
       "\n",
       "   key7  key8  key9  \n",
       "0   0.0   0.0   0.0  \n",
       "1   0.0   0.0   0.0  \n",
       "2   0.0   0.0   0.0  \n",
       "3   0.0   0.0   0.0  \n",
       "4   0.0   0.0   0.0  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "67213286",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data['eid_freq'] = train_data['eid'].map(train_data['eid'].value_counts())\n",
    "test_data['eid_freq'] = test_data['eid'].map(train_data['eid'].value_counts())\n",
    "# 它使用 train_data['eid'].value_counts() 计算的频数Series对象，将'eid'列中的每个元素映射为对应的频数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5ac26112",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>...</th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>key3</th>\n",
       "      <th>key4</th>\n",
       "      <th>key5</th>\n",
       "      <th>key6</th>\n",
       "      <th>key7</th>\n",
       "      <th>key8</th>\n",
       "      <th>key9</th>\n",
       "      <th>eid_freq</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-18 09:44:28.244</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>107</td>\n",
       "      <td>206</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"484\"}</td>\n",
       "      <td>2023-07-11 13:42:21.469</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>484.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-15 07:49:53.040</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>51591</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-16 00:36:55.688</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>17</td>\n",
       "      <td>366</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>53698</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-16 07:15:51.442</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>92</td>\n",
       "      <td>383</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap               common_ts  x1  x2  \\\n",
       "0     0   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-18 09:44:28.244   4   0   \n",
       "1     1   26  {\"key3\":\"67804\",\"key2\":\"484\"} 2023-07-11 13:42:21.469   4   0   \n",
       "2     2    8                        unknown 2023-07-15 07:49:53.040   4   0   \n",
       "3     3   11                        unknown 2023-07-16 00:36:55.688   1   3   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-16 07:15:51.442   0   3   \n",
       "\n",
       "   x3   x4   x5  x6  ...  key1   key2     key3  key4  key5  key6  key7  key8  \\\n",
       "0  41  107  206   1  ...   0.0  650.0  67804.0   0.0   0.0   0.0   0.0   0.0   \n",
       "1  41   24  283   4  ...   0.0  484.0  67804.0   0.0   0.0   0.0   0.0   0.0   \n",
       "2  41   71  288   4  ...   0.0    0.0      0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "3  41   17  366   1  ...   0.0    0.0      0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "4  41   92  383   4  ...   0.0  650.0  67804.0   0.0   0.0   0.0   0.0   0.0   \n",
       "\n",
       "   key9  eid_freq  \n",
       "0   0.0    174811  \n",
       "1   0.0    174811  \n",
       "2   0.0     51591  \n",
       "3   0.0     53698  \n",
       "4   0.0    174811  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "d8b513b9",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data['eid_mean'] = train_data['eid'].map(train_data.groupby('eid')['target'].mean())\n",
    "test_data['eid_mean'] = test_data['eid'].map(train_data.groupby('eid')['target'].mean())\n",
    "# 它使用 train_data.groupby('eid')['target'].mean() 计算的均值Series对象，将'eid'列中的每个元素映射为对应的target均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "4280625d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>...</th>\n",
       "      <th>key2</th>\n",
       "      <th>key3</th>\n",
       "      <th>key4</th>\n",
       "      <th>key5</th>\n",
       "      <th>key6</th>\n",
       "      <th>key7</th>\n",
       "      <th>key8</th>\n",
       "      <th>key9</th>\n",
       "      <th>eid_freq</th>\n",
       "      <th>eid_mean</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-18 09:44:28.244</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>107</td>\n",
       "      <td>206</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"484\"}</td>\n",
       "      <td>2023-07-11 13:42:21.469</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>484.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-15 07:49:53.040</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>51591</td>\n",
       "      <td>0.097401</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-16 00:36:55.688</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>17</td>\n",
       "      <td>366</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>53698</td>\n",
       "      <td>0.098421</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-16 07:15:51.442</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>92</td>\n",
       "      <td>383</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap               common_ts  x1  x2  \\\n",
       "0     0   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-18 09:44:28.244   4   0   \n",
       "1     1   26  {\"key3\":\"67804\",\"key2\":\"484\"} 2023-07-11 13:42:21.469   4   0   \n",
       "2     2    8                        unknown 2023-07-15 07:49:53.040   4   0   \n",
       "3     3   11                        unknown 2023-07-16 00:36:55.688   1   3   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-16 07:15:51.442   0   3   \n",
       "\n",
       "   x3   x4   x5  x6  ...   key2     key3  key4  key5  key6  key7  key8  key9  \\\n",
       "0  41  107  206   1  ...  650.0  67804.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "1  41   24  283   4  ...  484.0  67804.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "2  41   71  288   4  ...    0.0      0.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "3  41   17  366   1  ...    0.0      0.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "4  41   92  383   4  ...  650.0  67804.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "\n",
       "   eid_freq  eid_mean  \n",
       "0    174811  0.072707  \n",
       "1    174811  0.072707  \n",
       "2     51591  0.097401  \n",
       "3     53698  0.098421  \n",
       "4    174811  0.072707  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "5570ded9",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data['udmap_isunknown'] = (train_data['udmap'] == 'unknown').astype(int)\n",
    "test_data['udmap_isunknown'] = (test_data['udmap'] == 'unknown').astype(int)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "85a3698e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>...</th>\n",
       "      <th>key3</th>\n",
       "      <th>key4</th>\n",
       "      <th>key5</th>\n",
       "      <th>key6</th>\n",
       "      <th>key7</th>\n",
       "      <th>key8</th>\n",
       "      <th>key9</th>\n",
       "      <th>eid_freq</th>\n",
       "      <th>eid_mean</th>\n",
       "      <th>udmap_isunknown</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-18 09:44:28.244</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>107</td>\n",
       "      <td>206</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"484\"}</td>\n",
       "      <td>2023-07-11 13:42:21.469</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-15 07:49:53.040</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>51591</td>\n",
       "      <td>0.097401</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-16 00:36:55.688</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>17</td>\n",
       "      <td>366</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>53698</td>\n",
       "      <td>0.098421</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-16 07:15:51.442</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>92</td>\n",
       "      <td>383</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap               common_ts  x1  x2  \\\n",
       "0     0   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-18 09:44:28.244   4   0   \n",
       "1     1   26  {\"key3\":\"67804\",\"key2\":\"484\"} 2023-07-11 13:42:21.469   4   0   \n",
       "2     2    8                        unknown 2023-07-15 07:49:53.040   4   0   \n",
       "3     3   11                        unknown 2023-07-16 00:36:55.688   1   3   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-16 07:15:51.442   0   3   \n",
       "\n",
       "   x3   x4   x5  x6  ...     key3  key4  key5  key6  key7  key8  key9  \\\n",
       "0  41  107  206   1  ...  67804.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "1  41   24  283   4  ...  67804.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "2  41   71  288   4  ...      0.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "3  41   17  366   1  ...      0.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "4  41   92  383   4  ...  67804.0   0.0   0.0   0.0   0.0   0.0   0.0   \n",
       "\n",
       "   eid_freq  eid_mean  udmap_isunknown  \n",
       "0    174811  0.072707                0  \n",
       "1    174811  0.072707                0  \n",
       "2     51591  0.097401                1  \n",
       "3     53698  0.098421                1  \n",
       "4    174811  0.072707                0  \n",
       "\n",
       "[5 rows x 25 columns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "597a7e0f",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data['common_ts_hour'] = train_data['common_ts'].dt.hour\n",
    "test_data['common_ts_hour'] = test_data['common_ts'].dt.hour"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "bb69f87d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>...</th>\n",
       "      <th>key4</th>\n",
       "      <th>key5</th>\n",
       "      <th>key6</th>\n",
       "      <th>key7</th>\n",
       "      <th>key8</th>\n",
       "      <th>key9</th>\n",
       "      <th>eid_freq</th>\n",
       "      <th>eid_mean</th>\n",
       "      <th>udmap_isunknown</th>\n",
       "      <th>common_ts_hour</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-18 09:44:28.244</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>107</td>\n",
       "      <td>206</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"484\"}</td>\n",
       "      <td>2023-07-11 13:42:21.469</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "      <td>0</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-15 07:49:53.040</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>51591</td>\n",
       "      <td>0.097401</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-16 00:36:55.688</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>17</td>\n",
       "      <td>366</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>53698</td>\n",
       "      <td>0.098421</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-16 07:15:51.442</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>92</td>\n",
       "      <td>383</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap               common_ts  x1  x2  \\\n",
       "0     0   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-18 09:44:28.244   4   0   \n",
       "1     1   26  {\"key3\":\"67804\",\"key2\":\"484\"} 2023-07-11 13:42:21.469   4   0   \n",
       "2     2    8                        unknown 2023-07-15 07:49:53.040   4   0   \n",
       "3     3   11                        unknown 2023-07-16 00:36:55.688   1   3   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-16 07:15:51.442   0   3   \n",
       "\n",
       "   x3   x4   x5  x6  ...  key4  key5  key6  key7  key8  key9  eid_freq  \\\n",
       "0  41  107  206   1  ...   0.0   0.0   0.0   0.0   0.0   0.0    174811   \n",
       "1  41   24  283   4  ...   0.0   0.0   0.0   0.0   0.0   0.0    174811   \n",
       "2  41   71  288   4  ...   0.0   0.0   0.0   0.0   0.0   0.0     51591   \n",
       "3  41   17  366   1  ...   0.0   0.0   0.0   0.0   0.0   0.0     53698   \n",
       "4  41   92  383   4  ...   0.0   0.0   0.0   0.0   0.0   0.0    174811   \n",
       "\n",
       "   eid_mean  udmap_isunknown  common_ts_hour  \n",
       "0  0.072707                0               9  \n",
       "1  0.072707                0              13  \n",
       "2  0.097401                1               7  \n",
       "3  0.098421                1               0  \n",
       "4  0.072707                0               7  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "baf73557",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>...</th>\n",
       "      <th>key4</th>\n",
       "      <th>key5</th>\n",
       "      <th>key6</th>\n",
       "      <th>key7</th>\n",
       "      <th>key8</th>\n",
       "      <th>key9</th>\n",
       "      <th>eid_freq</th>\n",
       "      <th>eid_mean</th>\n",
       "      <th>udmap_isunknown</th>\n",
       "      <th>common_ts_hour</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-17 11:47:21.029</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>41</td>\n",
       "      <td>85</td>\n",
       "      <td>343</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>53698</td>\n",
       "      <td>0.098421</td>\n",
       "      <td>1</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>35</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-16 23:48:49.947</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>82643</td>\n",
       "      <td>0.103457</td>\n",
       "      <td>1</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>34</td>\n",
       "      <td>{\"key3\":\"73457\",\"key2\":\"936\"}</td>\n",
       "      <td>2023-07-10 04:57:46.999</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>49500</td>\n",
       "      <td>0.182384</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>{\"key3\":\"18771\"}</td>\n",
       "      <td>2023-07-14 04:23:43.754</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>104</td>\n",
       "      <td>37</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>5355</td>\n",
       "      <td>0.069281</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-16 14:00:18.904</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>41</td>\n",
       "      <td>115</td>\n",
       "      <td>217</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>174811</td>\n",
       "      <td>0.072707</td>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap               common_ts  x1  x2  \\\n",
       "0     0   11                        unknown 2023-07-17 11:47:21.029   4   1   \n",
       "1     1   35                        unknown 2023-07-16 23:48:49.947   4   0   \n",
       "2     2   34  {\"key3\":\"73457\",\"key2\":\"936\"} 2023-07-10 04:57:46.999   4   2   \n",
       "3     3    0               {\"key3\":\"18771\"} 2023-07-14 04:23:43.754   1   0   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-16 14:00:18.904   0   1   \n",
       "\n",
       "   x3   x4   x5  x6  ...  key4  key5  key6  key7  key8  key9  eid_freq  \\\n",
       "0  41   85  343   4  ...   0.0   0.0   0.0   0.0   0.0   0.0     53698   \n",
       "1  41   24  283   1  ...   0.0   0.0   0.0   0.0   0.0   0.0     82643   \n",
       "2  41   71  288   4  ...   0.0   0.0   0.0   0.0   0.0   0.0     49500   \n",
       "3  41  104   37   4  ...   0.0   0.0   0.0   0.0   0.0   0.0      5355   \n",
       "4  41  115  217   4  ...   0.0   0.0   0.0   0.0   0.0   0.0    174811   \n",
       "\n",
       "   eid_mean  udmap_isunknown  common_ts_hour  \n",
       "0  0.098421                1              11  \n",
       "1  0.103457                1              23  \n",
       "2  0.182384                0               4  \n",
       "3  0.069281                0               4  \n",
       "4  0.072707                0              14  \n",
       "\n",
       "[5 rows x 25 columns]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "8a7f25e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "import lightgbm as lgb\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "\n",
    "clf = DecisionTreeClassifier()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "2d504ffe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier()"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.fit(\n",
    "    train_data.drop(['udmap', 'common_ts', 'uuid', 'target'], axis=1),\n",
    "    train_data['target']\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "af692189",
   "metadata": {},
   "outputs": [],
   "source": [
    "result_df = pd.DataFrame({\n",
    "    'uuid': test_data['uuid'],  # 使用测试数据集中的 'uuid' 列作为 'uuid' 列的值\n",
    "    'target': clf.predict(test_data.drop(['udmap', 'common_ts', 'uuid'], axis=1))  # 使用模型 clf 对测试数据集进行预测，并将预测结果存储在 'target' 列中\n",
    "})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "7c2dbb25",
   "metadata": {},
   "outputs": [],
   "source": [
    "result_df.to_csv('submit.csv', index=None)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "892295ad",
   "metadata": {},
   "source": [
    "## 任务2.1 数据分析，便于特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9b222d8f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入库\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "# 读取训练集和测试集文件\n",
    "train_data1 = pd.read_csv('用户新增预测挑战赛公开数据/train.csv')\n",
    "test_data1 = pd.read_csv('用户新增预测挑战赛公开数据/test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4bdc2e92",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkUAAAHkCAYAAAAw1lsXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABNi0lEQVR4nO3deXgUVd728bs70J2NhMVsrAGFsAcUQcCFVZSRER0fUFZZoviIoJHFDJKAC0FFJqAIgxpQBlxgdMaFATUQFYIgS5iMMiCbOLJFGMLegXS9f/jSj006kEB3qpP+fq6rros+XX3qrgDJL+ecqrIYhmEIAAAgwFnNDgAAAOAPKIoAAABEUQQAACCJoggAAEASRREAAIAkiiIAAABJFEUAAACSKIoAAAAkURQBAABIoigCAACQRFEEAAD8zFdffaU+ffqodu3aslgs+tvf/nbZz2RnZ+v666+X3W7Xddddp4ULF5b5uBRFAADAr5w6dUqJiYmaM2dOqfbfs2ePfve736lr167Kzc3V448/rpEjR2rlypVlOq6FB8ICAAB/ZbFY9OGHH6pv374l7jNx4kR9+umn+te//uVqu//++3Xs2DGtWLGi1MdipAgAAPicw+HQ8ePH3TaHw+GVvtetW6cePXq4tfXq1Uvr1q0rUz9VvJIGXjPVkmB2BKUZS8yOAAAolRt82rs3fyYZaQ9o6tSpbm1paWmaMmXKVfd98OBBxcTEuLXFxMTo+PHjOnPmjEJCQkrVD0URAADwyJvTSRNSUpScnOzWZrfbvXiEq0dRBAAAfM5ut/usCIqNjdWhQ4fc2g4dOqSIiIhSjxJJFEUAAKAEFWXhcceOHbV8+XK3ts8//1wdO3YsUz8V5XwBAEA5s3pxK4uTJ08qNzdXubm5kn695D43N1f79u2TJKWkpGjIkCGu/UeNGqXdu3drwoQJ+ve//63XXntN77//vp544okyHZeRIgAA4JFZIycbN25U165dXa8vrEUaOnSoFi5cqAMHDrgKJElq2LChPv30Uz3xxBOaNWuW6tatqzfeeEO9evUq03G5T5Gf4eozAEDp+fbqsxe8+DNporHda335CiNFAADAo0BbY0NRBAAAPLKYHaCcBVoR6BXZ2dmyWCw6duxYifssXLhQ1atXL7dMAADg6jBSdAU6deqkAwcOKDIy0uwoAAD4TKCNnFAUXQGbzabY2FizYwAA4FOBVhQF2vlKkuLj45WRkeHW1qZNG02ZMkV79+6VxWJx3RtBko4dOyaLxaLs7GxJnqfPFi5cqPr16ys0NFT33HOPjhw54vsTAQAAXhOQRZG3rV+/XiNGjNDo0aOVm5urrl276rnnnjM7FgAAV8WsmzeahekzL5g1a5buuOMOTZgwQZLUpEkT5eTkaMWKFZf8nMPhkMPhcGs7L6eqVJh/PgCAyizQfhoF2vn6xLZt29ShQwe3ttI8byU9PV2RkZFu29c66quYAADgEgKyKLJarbr4Rt7nzp1zvSfJ7f0L73lbSkqKCgoK3LZbVNMnxwIAoKyYPgsAUVFROnDggOv18ePHtWfPHtd7knTgwAG1bdtWktwWXXvSrFkzrV+/3q3tm2++uWwOu90uu93u1sbUGQDAXwTaT6SALIq6deumhQsXqk+fPqpevbpSU1MVFBQkSQoJCdFNN92k6dOnq2HDhjp8+LCefvrpS/Y3ZswYde7cWTNmzNDdd9+tlStXXnY9EQAA/i7QiqJAO19Jv05b3Xbbbbrrrrv0u9/9Tn379tW1117rej8zM1Pnz5/XDTfcoMcff/yyV5LddNNNev311zVr1iwlJibqs88+u2whBQAA/IvFuHhxDUw11YtPJL5SacYSsyMAAErlBp/2/oYXfyaNNLZ7rS9fCcjpMwAAcHmBNp0UaOcLAADgESNFAADAo0AbOaEoAgAAHgVaURRo5wsAAOARI0UAAMAji9kByhlFEQAA8CjQppMC7XwBAAA8YqQIAAB4FGgjJxRFfsYf7iY91TLA7AhKO/OK2RGk4FpmJ5AKC8xOINkizU4gOc+bnUCy+MHqiiKH2Qlk7F9rdgRp+2azE8jS5VGzI/yqqm+7pygCAABQ4BVFgXa+AAAAHjFSBAAAPAq0kROKIgAA4FGgFUWBdr4AAAAeMVIEAAA8CrSRE4oiAADgUaAVRYF2vgAAAB4xUgQAADwKtJGTQDtfr8nOzpbFYtGxY8dK3GfhwoWqXr16uWUCAMCbrF7cKoKKktPvdOrUSQcOHFBkpB88AgEAAFw1ps+ukM1mU2xsrNkxAADwGT944l+5YqToEpxOp9LT09WwYUOFhIQoMTFRy5Ytk+R5+mzhwoWqX7++QkNDdc899+jIkSMmJQcA4OoF2vQZI0WXkJ6err/85S+aN2+eGjdurK+++kqDBg1SVFRUsX3Xr1+vESNGKD09XX379tWKFSuUlpZmQmoAALyjohQz3kJRVAKHw6Fp06bpiy++UMeOHSVJjRo10po1a/TnP/9ZDz30kNv+s2bN0h133KEJEyZIkpo0aaKcnBytWLHiksdwOBxubXZ7oex2m5fPBgAAXE6gFYGltnPnTp0+fVo9e/ZUeHi4a3v77be1a9euYvtv27ZNHTp0cGu7UEyVJD09XZGRkW5bevoCr54HAABXiukzSJJOnjwpSfr0009Vp04dt/fsdrvHwqisUlJSlJycfFHf3111vwAAeIMlwFZaUxSVoHnz5rLb7dq3b59uu+22Yu9fXBQ1a9ZM69evd2v75ptvLnkMu90uu91+UStTZwAAmIGiqATVqlXTuHHj9MQTT8jpdOrmm29WQUGB1q5dq4iICDVo0MBt/zFjxqhz586aMWOG7r77bq1cufKS64kAAPB3VothdoRyVVGm+Uzx7LPPavLkyUpPT1ezZs10xx136NNPP1XDhg2L7XvTTTfp9ddf16xZs5SYmKjPPvtMTz/9tAmpAQDwDovFe1tFYDEMI7DKQL+3yewAmmoZYHYEpZ15xewIUnAtsxNIhQVmJ5BsfnDXdud5sxP4x3f1Isfl9/ExY/9asyNI2zebnUCWLo+aHeFXVYsv7/Cmr6o08Vpft57f4bW+fIXpMwAA4JEf/CpQriiKAACARxbWFAEAAAQeRooAAIBH/rCUrjxRFAEAAI8oigAAAMR9igAAAAISI0UAAMCjAJs9oygCAACesaYIAc8f7iY9NeQxsyMo7fwCsyP4x52c/SGDJcjsBH7h7B1JZkdQ8EczzI4gBVU1O4HkLDQ7AXyAoggAAHjESBEAAIC4ozUAAEBAYqQIAAB4ZGX6DAAAIPDWFDF9BgAAIEaKAABACSwKrIXWFEUAAMAjps8AAAD0a1Hkra2s5syZo/j4eAUHB6tDhw7asGHDJffPyMhQQkKCQkJCVK9ePT3xxBM6e/ZsmY5JUQQAAPzKe++9p+TkZKWlpWnz5s1KTExUr169dPjwYY/7L1myRE899ZTS0tK0bds2vfnmm3rvvff0xz/+sUzHpSi6QgsXLlT16tXNjgEAgM9YLYbXtrKYOXOmkpKSNGzYMDVv3lzz5s1TaGioMjMzPe6fk5Ojzp07a8CAAYqPj9ftt9+uBx544LKjS8XOt0x7AwCAgOHN6TOHw6Hjx4+7bQ6Ho9gxCwsLtWnTJvXo0cPVZrVa1aNHD61bt85jzk6dOmnTpk2uImj37t1avny5evfuXabzLXNR5HQ69eKLL+q6666T3W5X/fr19fzzz0uS8vLy1K1bN4WEhKhWrVp66KGHdPLkSddnH3zwQfXt21fTpk1TTEyMqlevrmeeeUbnz5/X+PHjVbNmTdWtW1cLFvzfgzj37t0ri8Wi999/X7fccotCQkJ04403aseOHfr222/Vrl07hYeH684771R+fr5bzmeeeUZ169aV3W5XmzZttGLFimL9fvDBB+ratatCQ0OVmJhY4hf8t7KzszVs2DAVFBTIYrHIYrFoypQpkqTXXntNjRs3VnBwsGJiYnTfffeV9UsMAEClk56ersjISLctPT292H6//PKLioqKFBMT49YeExOjgwcPeux7wIABeuaZZ3TzzTeratWquvbaa9WlSxffT5+lpKRo+vTpmjx5sr7//nstWbJEMTExOnXqlHr16qUaNWro22+/1dKlS/XFF19o9OjRbp9ftWqV9u/fr6+++kozZ85UWlqa7rrrLtWoUUPr16/XqFGj9PDDD+s///mP2+fS0tL09NNPa/PmzapSpYoGDBigCRMmaNasWfr666+1c+dOpaamuvafNWuWXn75Zc2YMUP//Oc/1atXL/3+97/XDz/84NbvpEmTNG7cOOXm5qpJkyZ64IEHdP78pZ8K3qlTJ2VkZCgiIkIHDhzQgQMHNG7cOG3cuFFjxozRM888o+3bt2vFihW69dZby/olBgDAL1i8uKWkpKigoMBtS0lJ8UrO7OxsTZs2Ta+99po2b96sDz74QJ9++qmeffbZMvVTpkvyT5w4oVmzZunVV1/V0KFDJUnXXnutbr75Zr3++us6e/as3n77bYWFhUmSXn31VfXp00cvvPCCq+KrWbOmZs+eLavVqoSEBL344os6ffq0q5q7UHStWbNG999/v+vY48aNU69evSRJY8eO1QMPPKCsrCx17txZkjRixAgtXLjQtf+MGTM0ceJEVx8vvPCCVq9erYyMDM2ZM8et39/97neSpKlTp6pFixbauXOnmjZtWuLXwWazKTIyUhaLRbGxsa72ffv2KSwsTHfddZeqVaumBg0aqG3btiX243A4ig0d2u2FstttJX4GAIDy4s0Hwtrtdtnt9svu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tXfv3nI51uHDh91e5+bmaujQoercubPuu+8+ZWdn+zzDwoULtW7dOknS2bNnNWLECIWFhalJkyYKDw/XqFGjfF4ctWrVSs8++6x++uknnx7nUo4ePar77rtP9evX1yOPPKKioiKNHDlScXFxqlOnjjp16qQDBw6USxbDMGSxWIq1nzx5UsHBweWSAZfHzRsroBo1anj8z+XJ0aNHfZLhrbfecv35yJEjeu6559SrVy917NhRkrRu3TqtXLlSkydP1hNPPOGTDL8VGxurlStXKjExUUuWLFFaWpq2bt2qt956S/Pnz9eWLVt8nqEkW7du1fXXX6+ioiKfHeOzzz5Tnz591LhxY504cUKnTp3S0qVL1bVrV0m//mZcu3Ztn2bIyMjQ008/rV69emndunV69NFH9ac//UlPPPGEioqK9PLLL+ull17SQw895LMM119/vcf23NxcNW3a1PXDZ/PmzT7LEBQUpAMHDig6Olo5OTnq0qWLOnXqpPbt2ys3N1erV69WVlaWbr31Vp9laNSokd555x116NBB48eP17JlyzRz5kw1a9ZM27dv14QJE3T33XfrxRdf9FkGq9WqmjVr6tixY+rRo4eSkpJ09913q0qVKj475sVGjBihDRs26OGHH9ayZctUvXp17dmzR6+99pqsVqvGjh2rZs2auX0/87bk5GRJ0qxZs5SUlKTQ0FDXe0VFRVq/fr2CgoK0du1an2VA6VEUVUD+VpD84Q9/UNeuXTV69Gi39ldffVVffPGF/va3v/k8Q0hIiHbs2KF69eppyJAhql27tqZPn659+/apefPmOnnypM+OfeGbXkny8/O1ZMkSnxYknTp1UteuXfX888/LMAy99NJLevbZZ7V06VLdcccd5VIUNWvWTJMnT9aAAQO0ZcsWtW/fXvPmzdOIESMkSW+++abmzp2rjRs3+ixD1apV1aNHD910002uNsMw9Oyzz2rUqFGKjo6WJJ+OWlmtVh08eFDR0dG6/fbbVa9ePb355puu9x9//HHl5eUpKyvLZxmCg4O1Y8cO1a9fXwkJCZo1a5buuOMO1/tfffWVBg8erB9//NFnGaxWq/7zn/9ow4YNyszM1D/+8Q/VqFFDQ4YM0YgRI9SsWTOfHfuC2rVra9myZerUqZMOHTqkuLg4rVy5Uj179pQkrV27Vv3799d//vMfn2W48IvJl19+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\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 相关性热力图\n",
    "sns.heatmap(train_data1.corr().abs(), cmap='YlOrRd')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "56a524f3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='x7', ylabel='target'>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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AACAUZi5Qacz/qnxATmPq8ElhxySpJqGmoCd988//3NAzgMAaB/M3AAAAKMwcwNjWd2tVh8DAMxGuYGxmv+x2e4IAAAbcFsKAAAYhXIDAACMQrkBAABGodwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABiFcgMAAIzSKcpNcXGx4uLiFBISotTUVO3cufOi+65evVq33HKLrr32Wl177bVKT0+/5P4AAODqYnu5Wb9+vdxutwoKCrRnzx4lJCQoIyNDR48ebXX/bdu2afLkyXrnnXdUXl6u2NhY3XnnnTp06FAHJwcAAJ2R7eVm+fLlmjlzpnJycjRixAiVlJSoR48eWrNmTav7v/TSS/rZz36mxMRExcfH67nnnpPX61VZWVmr+zc1NamhoaHFBgAAzGVruWlublZFRYXS09N9Y0FBQUpPT1d5eXmbznHq1CmdPXtW1113XavfLywsVHh4uG+LjY0NSHYAANA52Vpujh07Jo/Ho8jIyBbjkZGRqqmpadM5Hn74YUVHR7coSN80b9481dfX+7bq6uorzg0AADqva+wOcCWWLl2qdevWadu2bQoJCWl1H5fLJZfL1cHJAACAXWwtN3379lVwcLBqa2tbjNfW1ioqKuqSx/7617/W0qVL9dZbb2n06NHtGRMAAHQhtt6WcjqdSkpKarEY+OvFwWlpaRc97sknn9SiRYu0efNmJScnd0RUAADQRdh+W8rtdis7O1vJyclKSUnRihUr1NjYqJycHEnStGnTFBMTo8LCQknSE088ofz8fJWWliouLs63NqdXr17q1auXbdcBAAA6B9vLTVZWlurq6pSfn6+amholJiZq8+bNvkXGVVVVCgr6+wTTypUr1dzcrB/96EctzlNQUKDHHnusI6MDAIBOyPZyI0mzZs3SrFmzWv3etm3bWnz9+eeft38gAADQZdn+Jn4AAACBRLkBAABGodwAAACjdIo1NwAuLi8vT3V1dZKkfv36qaioyOZEANC5UW6ATq6uru6CN7oEAFwct6UAAIBRKDcAAMAolBsAAGAU1twA7WT7P94akPOcuSZYcjjOP66pCdh5b313e0DOAwCdDTM3AADAKJQbAABgFMoNAAAwCmtugE4uzJIk6xuPAQCXQrkBOrkcj8fuCADQpXBbCgAAGIVyAwAAjEK5AQAARqHcAAAAo1BuAACA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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# x7分组下标签均值\n",
    "sns.barplot(x='x7', y='target', data=train_data1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0560493",
   "metadata": {},
   "source": [
    "编写代码回答下面的问题：\n",
    "- 字段x1至x8为用户相关的属性，为匿名处理字段。添加代码对这些数据字段的取值分析，那些字段为数值类型？那些字段为类别类型？\n",
    "- 对于数值类型的字段，考虑绘制在标签分组下的箱线图。\n",
    "- 从common_ts中提取小时，绘制每小时下标签分布的变化。\n",
    "- 对udmap进行onehot，统计每个key对应的标签均值，绘制直方图。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "93ae5d19",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>x7</th>\n",
       "      <th>x8</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>1689673468244</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>107</td>\n",
       "      <td>206</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"484\"}</td>\n",
       "      <td>1689082941469</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1689407393040</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1689467815688</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>17</td>\n",
       "      <td>366</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>1689491751442</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>92</td>\n",
       "      <td>383</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap      common_ts  x1  x2  x3   x4  \\\n",
       "0     0   26  {\"key3\":\"67804\",\"key2\":\"650\"}  1689673468244   4   0  41  107   \n",
       "1     1   26  {\"key3\":\"67804\",\"key2\":\"484\"}  1689082941469   4   0  41   24   \n",
       "2     2    8                        unknown  1689407393040   4   0  41   71   \n",
       "3     3   11                        unknown  1689467815688   1   3  41   17   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"}  1689491751442   0   3  41   92   \n",
       "\n",
       "    x5  x6  x7  x8  target  \n",
       "0  206   1   0   1       0  \n",
       "1  283   4   8   1       0  \n",
       "2  288   4   7   1       0  \n",
       "3  366   1   6   1       0  \n",
       "4  383   4   8   1       0  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "60fbd4c9",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>x7</th>\n",
       "      <th>x8</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1689594441029</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>41</td>\n",
       "      <td>85</td>\n",
       "      <td>343</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>35</td>\n",
       "      <td>unknown</td>\n",
       "      <td>1689551329947</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>34</td>\n",
       "      <td>{\"key3\":\"73457\",\"key2\":\"936\"}</td>\n",
       "      <td>1688965066999</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>{\"key3\":\"18771\"}</td>\n",
       "      <td>1689308623754</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>104</td>\n",
       "      <td>37</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>1689516018904</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>41</td>\n",
       "      <td>115</td>\n",
       "      <td>217</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap      common_ts  x1  x2  x3   x4  \\\n",
       "0     0   11                        unknown  1689594441029   4   1  41   85   \n",
       "1     1   35                        unknown  1689551329947   4   0  41   24   \n",
       "2     2   34  {\"key3\":\"73457\",\"key2\":\"936\"}  1688965066999   4   2  41   71   \n",
       "3     3    0               {\"key3\":\"18771\"}  1689308623754   1   0  41  104   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"}  1689516018904   0   1  41  115   \n",
       "\n",
       "    x5  x6  x7  x8  \n",
       "0  343   4   8   1  \n",
       "1  283   1   6   1  \n",
       "2  288   4   2   0  \n",
       "3   37   4   8   1  \n",
       "4  217   4   8   1  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data1.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6609785c",
   "metadata": {},
   "source": [
    "##### 针对问题1——字段x1至x8为用户相关的属性，为匿名处理字段。添加代码对这些数据字段的取值分析，那些字段为数值类型？那些字段为类别类型？\n",
    "    根据提供的数据样本，可以通过以下步骤对字段进行数值类型和类别类型的判断：\n",
    "\n",
    "    -观察字段的取值范围：首先，观察字段的取值范围。如果一个字段的取值是有限的且是离散的，那么它很可能是一个类别类型的字段。如果一个字段的取值是连续的或者有无穷多的可能取值，那么它很可能是一个数值类型的字段。\n",
    "\n",
    "    -查看字段的唯一值数量：可以使用 nunique() 方法来查看字段的唯一值数量。如果一个字段的唯一值数量相对较少，那么它很可能是一个类别类型的字段。如果一个字段的唯一值数量较多或者接近数据集的样本数量，那么它很可能是一个数值类型的字段。\n",
    "\n",
    "    -数据类型确认：根据字段的数据类型来进行判断。在前面回答中提到的代码示例中，使用了 dtypes 属性来获取字段的数据类型。数值类型的字段通常是整数（int）或浮点数（float），而类别类型的字段通常是字符串（object）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "ac9e0056",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "字段 x1 的唯一值数量：5,数据类型为：int64，取值范围在：0 - 4\n",
      "字段 x2 的唯一值数量：4,数据类型为：int64，取值范围在：0 - 3\n",
      "字段 x3 的唯一值数量：72,数据类型为：int64，取值范围在：0 - 74\n",
      "字段 x4 的唯一值数量：138,数据类型为：int64，取值范围在：0 - 151\n",
      "字段 x5 的唯一值数量：408,数据类型为：int64，取值范围在：0 - 413\n",
      "字段 x6 的唯一值数量：5,数据类型为：int64，取值范围在：0 - 4\n",
      "字段 x7 的唯一值数量：10,数据类型为：int64，取值范围在：0 - 9\n",
      "字段 x8 的唯一值数量：2,数据类型为：int64，取值范围在：0 - 1\n"
     ]
    }
   ],
   "source": [
    "# 输出字段的唯一值数量\n",
    "x_columns = ['x1','x2','x3','x4','x5','x6','x7','x8']\n",
    "for column in x_columns:\n",
    "    unique_values = train_data1[column].nunique()\n",
    "    min_value = train_data1[column].min()\n",
    "    max_value = train_data1[column].max()\n",
    "    print(f\"字段 {column} 的唯一值数量：{unique_values},数据类型为：{train_data1[column].dtypes}，取值范围在：{min_value} - {max_value}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2eb1b11",
   "metadata": {},
   "source": [
    "##### 由此可知，x1 x2 x6 x7 x8的唯一值数量和取值范围是一一对应的，如x7的唯一值数量为10，因此处理成数值类型中的 [0,9]代表10种类型。\n",
    "    结论：x1, x2, x6, x7, x8为类别类型；x3, x4, x5为数值类型。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "66b720cb",
   "metadata": {},
   "source": [
    "##### 针对问题2——对于数值类型的字段，考虑绘制在标签分组下的箱线图。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "265331aa",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABcwAAAMQCAYAAAAaYSZ5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAADhWElEQVR4nOzdeXhU9fn//9fMhEwIISTQEBOgikhZjPmEaLXgggr9qkBEq5aKVBBFlrpAtSAiiFRFEREBFatQKMoiLsgm7qBAFSmmNCUBhCJbHJZsJIEsM+f3Bz9GQibrJHNmeT6ui+vKOfe859wZ3rkzueec97EYhmEIAAAAAAAAAIAQZzU7AQAAAAAAAAAA/AENcwAAAAAAAAAARMMcAAAAAAAAAABJNMwBAAAAAAAAAJBEwxwAAAAAAAAAAEk0zAEAAAAAAAAAkETDHAAAAAAAAAAASTTMAQAAAAAAAACQRMMcAAAAAAAAAABJNMwRBMrLy+s9tqCgoNK+/fv368cff/QmJQBAHVHLASCwUccBIPBRy4HTaJgjoJ08eVI33nijMjMzK8X++te/6v333692/MSJEzV37twK+/73v//pgQce0E8//aQVK1boxIkTHsdu375dOTk5tc71gw8+qPVjASCUUMsBILBRxwEg8FHLgZ+FmZ0A4I1Vq1YpNTVVXbp0kSTt3r1bx44d0//93//pyy+/1PDhwyVJpaWlev/99/WHP/zBPba0tFTbtm3T448/XuE5w8PD1aFDB5133nlyuVzq3bu3Pv/8c0VFRVV4XHp6ukaPHq02bdpIksrKypSbm6vWrVt7zPX777/XhRdeqP/7v/9rsO8fAIIBtRwAAht1HAACH7Uc+BkNcwSs0tJSvf7667rgggs0aNAgRUdH6/jx44qMjNSvf/1rlZWV6eGHH1ZYWJjy8/N14MABJSQkqGfPnpKkdevWqV+/foqPj9fGjRt16aWXqmnTpgoPD5fT6ZQk/e53v9OPP/6okydPViroYWFhuvXWW/Xggw9Kkr788kutW7dOU6dOldVq1YkTJ5SXl6d27dpJkq688krTinl+fr7efPNNPfLII6YcHwCqQi2vWX5+vt566y01bdpU+fn5OnHihB599FFFRkb6NA8A8IQ6XrPDhw9rxYoVCgsL0759+9StWzfdcccdPs0BAKpDLa+bnJwcDRgwQJ9++qlpOaBx0TBHwHrzzTd155136r777tPy5ct14sQJDR06VDk5ORo1apRWrVqlkpISvfDCC3rttdcqFeQPP/xQ06dPl2EYmjhxoh555BH169dP4eHhKi0tVWlpqY4ePapOnTrp1ltv1WuvvaZLLrnEPd5isVR4viVLlqigoECDBw+WJB06dEgtW7bU8uXLKz3WV3Jzc7V69WotW7ZMF154oSk5AEB1qOU1GzdunCZPnqzzzjtPkvS3v/1NL7/8ssaPH29KPgBwNup4zf785z9rzpw5+sUvfiHDMPTHP/5Rbdq0UY8ePUzJBwDORS2vm9dee83jmu0IHqxhjoCUlZWlEydO6L777lNGRoZ69eql1atXS5IWLFigF154QTExMYqPj1fLli31+eefVxj/2Wef6brrrlNsbKy++uorpaam6ptvvtHvf/97Pfroo9q1a5deeeUVbdq0STExMVqyZIn7siRPtm/frgsvvFBpaWlatGiR3nzzTdntdj355JOmFvPY2Fj98Y9/1N13321aDgBQFWp5zYqLi7V582bZ7Xb3vquuukrr1683JR8AOBt1vHZ27dqlgwcPSjrdFLr22mv1xRdfmJYPAJyNWl43u3bt4krPEMAZ5ghIWVlZGjdunCRp9OjRevnll/XGG2/oyJEjSkpKUtu2bd2Pvffee/Xjjz8qJydHLVu21M6dO/Xqq69q1KhRWrFihVatWqUXXnhBJ0+eVKtWrXTw4EFNmTJFY8aMqVUuLpdLn376qcaOHauXX35Z+/fv11tvvaVbb721wiemZgoL40cdgP+hltfMMAy1aNFCWVlZ6t69uyTJauV8BwD+gTpeO2vWrKmwDm9hYaFatWplYkYA8DNqed28//77GjhwoJYuXWp2KmhE/MWFgHTLLbe4v7bZbLr44ov1/fffKzIyUsuXL9cdd9yhP/7xj/rjH/+oRx99VI899phef/11SVJMTIyio6MVHR0tm82mm2++WS1btlSbNm0UERGhqKgoFRYWup/fMAz95S9/0apVqzzm8s033+iee+6R1WrV0KFD9fDDD+vw4cMaNmxYo74G33//vW6//XbdeOONcjgc2rBhg377299yt2gAAYNaXnMtb9asmb7++mt3s1ySNm/erKuvvrpR8wKA2qCO1+49eUJCgmw2myTpwIED+uc//8ka5gD8BrW89v2VL7/8Uj179uQElhDAaacISN98840KCgrUtGlTORwObd68WdnZ2dq5c6dsNpuef/55dejQwf342bNnu9fwjo+P14IFC3T06FEtX75cL7zwgv73v//pwIEDysvLU3l5uQ4dOqS1a9dKOl3Q+/Xr51479lxn1h40DENLlixRu3btlJOTo//85z9KTk5utNegW7dumjlzpgYOHCi73a7IyEj96U9/qvDLDgD8GbW87rW8sLBQq1evdv+RAgBmoo7XrY4/99xz+vLLL/Xcc8/pF7/4RaPlBAB1QS2vXS0vKyvTd999p7Fjx7qX2ULwomGOgPSb3/xG0umz7E6ePKlDhw5pwIABCg8P15tvvqlx48apadOm7scfOnRIjzzyiHu7vLxczz77rB577DFJktPp1C9/+UtdddVVslqtmj17tq677jo1bdpUy5cvV1xcnDp16lRlPnv37tWbb76p66+/XiNGjND+/fv1yCOPqGnTprrhhhuqLOwPPfSQvv/+e82bN0+/+tWv6vw6tG3bVmlpaXruuecUHh6uKVOm1Pk5AMAs1PLT6lLLp02bpilTpiguLq7OxwGAhkYdP622dfyxxx7TmDFj9Oijj+q2227TtddeW+djAUBDo5afVlMtf+eddzRgwIA6Py8CEw1zBLR33nlHzZo1U3Z2tm6//Xb94x//kMVi8fgJ6BklJSUaMWKE7Ha7Fi1apJYtW+q8885zF3NJOv/887Vv3z73p6l//vOfdfnll1c6/uHDh/X+++/LZrNp0qRJ2rt3r0aOHKmOHTtq8eLFWr9+vd577z117drVY/7/+9//lJubq+Li4nq/BiNHjlTv3r310ksv1fs5AMBM1PLa1fLXX39daWlpSkpKqvdxAKAxUMdr/57cbrfrwQcf1IgRI2iYA/Ar1PKqa3lubq4KCgp0/vnn1/u5EVhomCNg7dy5U61bt1br1q310EMP6d///rfS09NlGEa14+x2u5o3b64LLrhAQ4YMUcuWLSs9plu3blq+fLnWr1+vadOm6frrr5fT6XSvPXhGy5Yt9bvf/c693bVrV82YMUNjx47VkSNH9Nvf/la//e1vq8zlvffe08mTJ9WiRYs6fvc/y8/P1wUXXKAVK1ZUWOMWAAIBtfy0mmr58uXLdeGFF+rXv/51vY8BAI2BOn5adXU8PT1dl1xyiTvv888/X4cOHXLfNA8AzEYtP62qWv6v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mE9njiv5fk4xnxCKHn30oSr3T58+y8fZIND997//0e7duyrs2717p/773//o4osvMSkrwPd4T46GxHvy4GFqwzw9PV3t27dXTExMncY5HA7Fxsa6t1u0aKHy8nLl5eWpdevW9c4nLKxuJ9yfOnVSo0bVbs11BKa//e3vioho6pNjMZ9Cgy/nlC85nU69+OKL+u677zR9+nT3GefVOXLkSIVaLp2u58eOHat3w7yuddwshmHo6acnV/pDNZh17NhJTzwxOWjfUJmJ+QQEvxMnTign55jHWE7OMZ04cULNmzf3cVYIVC6XS6+/Pttj7PXXZ2vmzLm1ei8HBDrDMDR16lP64YfQeQ910UW/0vjxT/IeqhEwn4KLaQ3zkydPatu2bRo6dGidx5aVlVXYPvNJijdnl1utFsXGNqvTmJMneRMR7GJimqlpU980N5lPocGXc8qXbDabxo4dq5ycHI0aNUrPPPOMOnToUO0YT1c1GIZR71penzpuFsMwFBYWWjc3DQuzKja2WVC+mTIb8wkIfk888Zca4y+/PNdH2SDQbd+ersLCQo+xwsJCbd+erpSUVB9nBQCA/zCtYf7dd9+pefPmWrNmjSRp9+7dCg8P15o1a/T//t//U5MmTaocGxcXp9zcXPd2fn6+7HZ7nc9UP5vLZaigoLhOY0pKTrm/juzQTxarb15OwzAkw+mTY/kNi813S6O4ylW85/RNZPPzi3XqlMsnxz17Pj102S8UbvNdE8AwDJX55tv0C02svr1UqdRpaNbW02eF1XVORUc3lc0WOB+mtGzZUr169dK8efP07LPPVvvYuLg45eXlVdhXUFCg+Pj4eh27PnXcTI89Nsmnl+uVlJTogQeGS5LmzHlddrvdZ8eWTl+ul5cXOP8/gcbX80kyd04F2nwKtFoO//P00y/o4YeHVxsHais5OUVRUVEem+ZRUVFKTk7xfVKACSwWi8aPf9Ln78lHjx4pSZo58zVT3pNzwkHjMGM+SebOqWCeT6Y1zK+55poK23v37lVkZKT69u1b49jU1FRlZGTosssukyRlZWXp0ksv9Tqn8vK6dQzPfrw1LMJnDXM0LsNV7v66vNwlm803neSz51NUuNWnDXM0rlLnzzex9OWc8pWHHnpIjz76qH75y19KkiIiInTixIkax52p5f3795ck/fDDD2rTpo1atWpV71zqWsfN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AAD4scceG+1VHAAAALVHwxwAAAAA/Nhzz830Kg4AAIDao2EOAAAAAH7s9HIrFo8xi8XCciwAAAANiDXMAQAAAFTpyJEjWrFihWJjY3XkyBGVlpZq9OjRslgsOnjwoF566SV16NBBhw8f1pgxY9SqVSuzUw46JSUlkgyPMcMwVFJSIrvd7tukEBSGDh3o/nr+/MUmZgIAgP/gDHMAAAAAVRo3bpwGDhyoO+64Q3/605+Ul5en1atXS5JGjx6te++9V6NGjdJtt92msWPHmpxtcHrllZlexQFPVqx4t9ptAABCFQ1zAAAAAFVKT09XZmame7tTp07KzMxUenq6SkpK1LVrV0lSt27dtHPnTu3Zs8esVIPWn/402qs44MnKle9Xu43g9Nprr2nevHnu7YMHD+qRRx7Rq6++qieeeELHjx83MTsA8A80zAEAAABUad68eerUqZN7e9euXerSpYu2bNmiSy65pMJjO3XqpPT0dB9nGPxqWm6F5VhQVw88cH+d9iM4ZGZm6tNPP62wjyuFAKAy1jAHAAAAUKXU1FT31/v379fBgwc1ceJEPfvss5VuNhkdHa1jx455dbywMM7pOVdGRka18aysHUpKSvJRNgh0eXl5Ki4u9BgrLi5UYWGBYmJifJsUGl1paanWr1+v6667zr2vuiuFOnToYFaqAGA6GuYAAAAAapSfn6958+Zp5syZstlsKi0tVURERIXHGIah8PDweh/DarUoNraZt6kGnWnTnq4xvmrVKh9lg0B3//1Dqo2PHTtay5cv900y8Jlly5bpzjvv1KJFi9z7qrtSyJuGOR98Vs3p/Pm1CQuz8lrBa8ypxmFqw9zhcOibb77Ru+++q0GDBumGG26o9diVK1dq69atio2NVWRkpIYPH96ImQIAAAChKz8/X3PnztW4ceMUGRkpSYqLi5PD4ajwuIKCAsXHx9f7OC6XoYKCYq9yDUZjxz5RbdN87NgnlJtb5MOMEMimTZuphx4aUW2c+VRZdHRT2WyB2YhKT09X+/btK1054HA4GvxKIT74rN6pUzb31zExzSp98AzUFXOqcZjaMI+Pj1f//v21adMmGYZR63FZWVlauHChli9fLqvVqkmTJmn16tXq169fI2YLAAAAhJ7i4mK9+uqrevjhh93N8szMTKWmpuqFF15wP84wDO3atUspKSleHa+83OXV+GDUtu0va4zzuqG2oqKiFRkZ5XFZlqioKEVFRTOfgsjJkye1bds2DR06tFKsMa4U4oPP6pWUnHJ/nZdXJLvdaWI2CAbMqdqryweffrEki9Vat09pFy9erL59+7rH9e7dW7Nnzza1YW64yk07tq+c+VDDYrGYnEnj8of/y1Jn7T9AClShMp+k0Pj/BAAEr1deeUUjRoxwN8sdDoc+//xzjRo1ShaLRTt37lSnTp20detWpaSkKDEx0eSMg8+kSeNqjM+Y8YqPskEwmDPnbxo6dGCl/bNm/c2EbNCYvvvuOzVv3lxr1qyRJO3evVvh4eFas2aNWrZsWelscm+vFJL44LM6Z7825eUu2Wy8VvAOc6px+EXDvK62bNmim2++2b3duXNn7dixQ6WlpV59ElrXdX7OXieoaPeKeh8X/suX6z+dPZ+mf3vUJ8eE77GmGAAgkOzevVtLliypsD52bm6uxo4dK6vVqjlz5mjWrFm64IILdOjQIU2ZMsXEbIPXlCnP66GH7q82DtRVhw4dtWfP7grbCD7XXHNNhe29e/cqMjJSffv2VYsWLRrlSiEACHQB2TA/d52tFi1aqLy8XHl5eWrdunW9nrM+62ydvU4QgpMv139iPoUG1hQDAASSjh07atu2bVXG27Ztq2nTpvkwo9AUFRWl8PAIlZaeqhSz2yMUFRVlQlYIZA7HT/rf//ZW2Ldv3145HD8pPv48k7KCr/Xo0YMrhQDAg4BsmJeVlVXYPrO0g6/X2TIMQ2+8saDexwwkJSUleuCB0zdWnTPnddntdpMz8o3i4nKdPOmbG94wn0JDXedUIN9cCAAANIzS0lKPzXLp9Nql3l5pi9BiGIbefnuBJMPj/jFjxoXEsomhpry8XKtXr9aXX36psLAwJSQkqE+fPlwpBAAeBGTDPC4uTrm5ue7t/Px82e32Snd8rqv6rLNls4XGG9Oz10Cy2ZqEzPftdBo6941kYwqV1zVU55Pk+zkFAAAC37x5c2uMjxz5kI+yQaDLzj6sjIztlfa7XC5lZGxXdvZhJSa2MSEzNKawsDDdcsstuuWWWyrs50ohAKgsIE9bTE1NVUZGhns7KytLl156qYkZAQAAAEDjuPfeEV7FgbMlJCQqKSnZYywpKVkJCSzHAQAIbX7RMHe5XO5lVSRp3759GjZsmA4cOODx8YMHD9ZHH33kHrNu3ToNGjTIJ7kCAAAAgC+Fh4erSRPPV+SFh4ezHAvqxGKx6IYb+nqM3XhjP5ZjAQCEPFOXZHE4HFq/fr02b96sQ4cOqaioSP3791dOTo4yMzN19OhRtWvXrtK45ORkDRo0SJMnT1Z0dLTat2+vXr16mfAdAAAAAEDjOnHihMrKSj3GSktLdeLECTVv3tzHWSFQGYahjz9eI4vFUuHENYvFonXrVqtLl4tpmgMAQpqpDfP4+HgNGDBAAwYMqLA/NTVVGzdurHZsWlqa0tLSGjM9AAAAADDdE0/8pcb4yy9Xv845cEZVa5gbhsEa5gAAyE+WZAEAAAAAePb00y94FQfOxhrmAABUj4Y5AAAAAPix5s2bq2XLX3iM/eIXrVmOBXXCGuYAAFSPhjkAAAAA+Lnp02d53D9t2kzfJoKAd2YNc0/WrVtdYV1zAABCEQ1zAAAAAABCRFVrmEtyr2EOAEAoo2EOAAAAAH5u6NCBddoPVCUhIVE2m81jzGazsYY5ACDk0TAHAAAAAD9WU1Ocpjnq4sSJE3I6nR5jTqdTJ06c8HFGAAD4FxrmAAAAAACEiMcff8SrOAAAwY6GOQAAAAAAIeLZZ1/0Kg4AQLCjYQ4AAAAAfmz+/MVexYGzRUdHexUHACDY0TAHAAAAAD928uRJr+LA2f75z396FQcAINjRMAcAAAAAP/b883/1Kg6c7Y03ZnsVBwAg2NEwBwAAAAA/Nm7cRK/iwNmGDXvQqzgAAMEuzOwEAACBzTAMTZ8+XRaLRcXFxbrmmmt07bXX1jju/fff14wZM2S1/vzZ7U033aTx48c3YrYAAASepk2bqmPHTtq9e2elWKdOXdW0aVMTskKg6t69e7VnkXfv3t2H2QAA4H9omAMAvLJ48WKVlJToiSeekMvl0u23364OHTqoXbt2NY5dunSp2rZt64MsAQAIbOPHP6mhQwdW2j9u3BMmZINAZhiGkpKSlZGxvVIsKSlZhmHIYrGYkBkAAP6BJVkAAF5ZtGiRbrnlFkmS1WpVjx49tHTpUnOTAgAgCA0den+120BtZGcf9tgsl6SMjO3Kzj7s44wAAPAvnGEOAKi3o0eP6sCBA7r44ovd+zp37lzrhvmWLVu0ePFiHT9+XDabTZMnT1Z4eHi98wkLq9vnwE4nnxuHgrAwa53nRn0wn0KDr+YT4MnXX68/Z3uDrrrqWhMyQSBLSEhUUlKyduzIkMvlcu+3Wq3q2jVJCQmJJmYHAID5aJgDAOrN4XCoRYsWFS7bjY6O1tGjR2scGxkZqfz8fI0dO1aS9PLLL2vBggW6//76nS1ntVoUG9usTmNOnbLV61gILDExzRQREdHox2E+hQZfzSfgXP/973+0e/euCvt2796p//73P7r44ktMygqByGKx6K67hmjChL9U2j9o0D0sxwIACHk0zAEA9VZaWlppn2EYtTpL/MYbb6y0PXny5Ho3zF0uQwUFxXUaU1Jyql7HQmDJyyuS3e5s9OMwn0JDfeZTdHRT2WyclY76c7lcev11zzdpfP312Zo5c26Fm2gDNYmPP09XXnmNvv76S/e+K6+8Rq1bx5uYFQAA/oF3VQCAeouLi1N+fr4Mw3DvKygoUHx8zX9s5ebmqqSkxL0dExOj/Px8r/IpL3fV+R+CX33mRX3/IfgxL2CG7dvTVVhY6DFWWFio7dvTfZsQgsLmzV9V2N606asqHgkAQGihYQ4AqLe2bduqVatWysrKcu/LzMzUpZdeWuPYkSNH6r333nNv5+TkKCEhoVHyBAAgkCUnp3gVB871zjtvy+mseLWM0+nUO++8bVJGAAD4DxrmAIB6s1gsuueee7Ry5UpJUnl5uTZv3qzbb79d+/bt07Bhw3TgwAGPY9u0aaOkpCT39ieffKK0tDSf5A0AQCDZs2ePV3HgbGVlZVq3bo3H2Lp1a1RWVubjjAAA8C+sYQ4A8MqQIUM0Y8YMzZgxQ/n5+RozZozi4uJ04MABZWZm6ujRo2rXrl2lcZMmTdIHH3ygrKwsFRcXy263q3///iZ8BwCA6jgcDn3zzTd69913NWjQIN1www3u2MGDB/XSSy+pQ4cOOnz4sMaMGaNWrVqZmG1wmjr1yRrj8+cv9lE2CHRLlvyjxvjdd9/ro2zgK0eOHNGKFSsUGxurI0eOqLS0VKNHj5bFYqGWA8A5aJgDALxisVj0yCOPVNqfmpqqjRs3VjmuRYsWGjJkSCNmBgBoCPHx8erfv782bdpU4Z4VkjR69GhNmTJFXbt21ffff6+xY8dq3rx5JmUavMaPf6rapvn48U/5MBsEujvvvFvr139ebRzBZ9y4cZo9e7aioqIkSU8++aRWr16ttLQ0ajkAnMPUhrlhGJo+fbosFouKi4t1zTXX6Nprr61x3Pvvv68ZM2ZUuBP8TTfdpPHjxzditgAAAEDoOvu9tySlp6erpKREXbt2lSR169ZNO3fu1J49e9ShQwczUgxaHTt29CoOnK1Jkya68ca+Hpdl6dPnZjVp0sSErNDY0tPTlZmZqV//+teSpE6dOikzM1Pt2rWjlgPAOUxtmC9evFglJSV64okn5HK5dPvtt6tDhw4eL90/19KlS9W2bVsfZAkAAADgXFu2bNEll1xSYV+nTp2Unp7uVZMlLIzbLJ3LMAwlJSUrI2N7pVhSUrJsNossFosJmSFQDRz4R3366cdyOsvd+2y2MP3hDwNNzAqNad68ebrooovc27t27dKll17aaLUcAAKZqQ3zRYsWafr06ZJOn7HSo0cPLV26VH/5y1/MTAsAAABADRwOh2JjYyvsi46O1rFjx+r9nFarRbGxzbxNLegcOHDAY7NckjIytquoKLdWJx0BZ3vxxekaPXp0hW1+/oJXamqq++v9+/fr4MGDmjhxop599tkGr+V88Fk1p/Pn1yYszMprBa8xpxqHaQ3zo0eP6sCBA7r44ovd+zp37qylS5fWavyWLVu0ePFiHT9+XDabTZMnT1Z4eHhjpQsAAADgLKWlpYqIiKiwzzAMr96Tu1yGCgqKvU0t6DRrFlvlGeaXXPJ/atYsVrm5RSZkhkDWsuV5Skhoo+zsQ0pIaKOWLc9jHlUjOrqpbLbAb0Tl5+dr3rx5mjlzpmw2W4PXcj74rN6pUzb31zExzSq99kBdMacah2kNc4fDoRYtWlS4dDA6OlpHjx6tcWxkZKTy8/M1duxYSdLLL7+sBQsW6P777/cqJz6FqRqfWKEhMZ8AAAh8cXFxcjgcFfYVFBQoPj7eq+ctL3d5NT70GHI6DUlGjY8EzvXMMy+4v+ZnL/jl5+dr7ty5GjdunCIjIyU1fC3ng8/qlZSccn+dl1cku91pYjYIBsyp2qvLB5+mNcxLS0sr7avtp5g33nhjpe3Jkyd71TDnU9Dq8YkVGhLzCQCAwJeamqoXXvi52WYYhnbt2qWUlBTzkgpSJSUlVS7J8p//bFdJSYnsdruPswIQSIqLi/Xqq6/q4YcfdjfLMzMzG6WW8+FL1c5+bcrLXbLZeK3gHeZU4zCtYR4XF6f8/HwZhuE+y7y2n2Lm5uYqMjLS/aYwJiZG+fn5XuXDp6DV4xMrNCTmU+0Fy6WfAIDA53K5ZBg/n8Xco0cPWSwW7dy5U506ddLWrVuVkpKixMREE7MMTq+8MrPG+J//PM43yQAISK+88opGjBjhbpY7HA59/vnnGjVqFLUcAM5hWsO8bdu2atWqlbKystSlSxdJpz/dvPTSS2scO3LkSN18880aOPD0HbxzcnKUkJDgdU58Clo1PrFCQ2I+AQAQOBwOh9avX6/Nmzfr0KFDKioqUv/+/dWkSRPNmTNHs2bN0gUXXKBDhw5pypQpZqcblP70p9EaOfKeauMAUJXdu3dryZIlWrVqlXtfbm6uxo4dK6vVSi0HgHOY1jC3WCy65557tHLlSnXp0kXl5eXavHmz3njjDe3bt0/PPPOMJk2a5PFu723atFFSUpJ7+5NPPlFaWpov0wcAAABCQnx8vAYMGKABAwZUirVt21bTpk0zIavQYrfbddlll2vr1i2VYpdf3p3lWFBvQ4cOdH89f/5iEzNBY+rYsaO2bdtWZZxaDgAVmXqd/5AhQxQWFqYZM2bor3/9q8aMGaO4uDjl5OQoMzOzyhuATpo0Sdu2bdM777yjBQsWyG63q3///j7OHgAAAAB8Y9So0R73jxjxoG8TQdCYN29utdsAAIQq084wl06fZf7II49U2p+amqqNGzdWOa5FixYaMmRII2YGAAAAAEDw2rTpq0rb9947wqRsAADwH9xJDgAAAAD83NlLZ9RmP1Cd++77Y532AwAQSmiYAwAAAIAfq6kpTtMcdXHkyBG5XE6PMZfLqSNHjvg4IwAA/AsNcwAAAAAAQsRjj432Kg4AQLCjYQ4AAAAAQIh47rmZXsUBAAh2NMwBAAAAwI/Nn7/YqzhwttatW8tqtXmM2Ww2tW7d2scZAQDgX2iYAwAAAIAfMwxDSUnJHmNJSckyDMPHGSHQvfnmIo/733jD834AAEIJDXMAAAAA8GPZ2YeVkbHdYywjY7uysw/7OCMAAIDgRcMcAAAAAPxYQkJitWeYJyQk+jgjAACA4EXDHAAAAAD8mMViUdu27TzG2rX7pSwWi48zQqAbOnRgnfYDABBKaJgDAAAAgB8rLy/XunVrPMY++mi1ysvLfZwRAtmGDRu8igMAEOxomAMAAACAH1u16gOv4sDZFi583as4AADBjoY5AAAAAPixtLRbvYoDZxs8eLhXcQAAgh0NcwAAAADwYy6Xy6s4cLaePXt6FQcAINjRMAcAAAAAPzZv3lyv4sC55s9fXKf9AACEEhrmAAAAAODH7r13hFdxAAAA1B4NcwAAAADwY+Hh4WrZ8hceY61axSk8PNzHGSHQPfroQ3XaDwBAKKFhDgAAAAB+rKSkRDk5xzzGjh8/qpKSEh9nhEB24sSJKudTTs4xnThxwscZAQDgX2iYAwAAAIAfe+WVmV7FgbM98cRfvIoDABDsaJgDAAAAgB/7059GexUHzvb00y94FQcAINjRMAcAAAAAP2a323XZZZd7jF1+eXfZ7XYfZ4RA1rx5c4WHR3iMRUREqHnz5j7OCAAA/0LDHAAAAAD83KhRoz3uHzHiQd8mgoBXVlam0tJTHmOnTp1SWVmZjzMCAMC/0DAHAAAAgAAwevRfqt0GamPJkn94FQcAINjRMAcAAACAAPDDD7srbO/Z84NJmSCQ3Xnn3V7FAQAIdjTMAQAAAMDPORw/ae3aVRX2rV27Ug7HTyZlhEDVpEkT3XhjX4+xPn1uVpMmTXycEQAA/iXMzIMbhqHp06fLYrGouLhY11xzja699tpajV25cqW2bt2q2NhYRUZGavjw4Y2bLADAI2o5AIQ2b34PoHYMw9Dbby+QYbgq7Hc6XXr77QUaM2acLBaLSdkhEP3+93fp00/Xyel0uvfZbDbdfvsfTMwKZqGOA0BFpjbMFy9erJKSEj3xxBNyuVy6/fbb1aFDB7Vr167acVlZWVq4cKGWL18uq9WqSZMmafXq1erXr5+PMgcAnEEtB4DQVt/fA6i97OzDysjY7iFiKCNju7KzDysxsY3P80Jg69HjGn399Zfu7SuvvMbEbGAm6jjQMAzDUGlpiU+PWVJS4vFrXwgPtwftB/amNswXLVqk6dOnS5KsVqt69OihpUuX6i9/qf7mNYsXL1bfvn1ltZ5eUaZ3796aPXt2yDRZQu0HUAruH0J/4Os5xXwKLsFSyw1XuW+PZxiS4az5gcHCYvPpz52v/z/PVeo0fHo8wzBU5qr5ccGiiVU+nU++/v8MNPX9PYDaS0hIVHR0tAoKCirFoqOjlZCQaEJWCGQOx0/atOmrCvs2bfpKN92Upvj480zKCmYJ5TrO38JoKIZhaOrUp/TDD7tMy2H06JE+Pd5FF/1K48c/GZRzyrSG+dGjR3XgwAFdfPHF7n2dO3fW0qVLaxy7ZcsW3XzzzRXG7dixQ6WlpQoPD693TmFh/r+ku2EYevrpydq9O3R+ACWpY8dOeuKJyUH5Q2g2s+cU8ymw+Vstr2sddzp/fnzR7hX1Oib8X1iY1Se/48+eT9O/Pdrox4M5fDWfAoU3vweqwutbWUlJicdmuSQVFBTI5SqX3W73cVYIVGeW+JEMj/v/8pfxvE8OIaFcx/lbGA3JMIyQe10tFovCwqxB+X2b1jB3OBxq0aJFhRc1OjpaR4/W/Aemw+FQbGyse7tFixYqLy9XXl6eWrduXa98rFaLYmOb1WusLxmGobAwm9lp+FxYmFWxsc2C8ofQbKE4p5hPDcefanl96vipU6E190NVTEwzRURENPpxmE+hwVfzKVB483vAk0B5T+5rkye/UG187txZmjx5sm+SQcA7cOCAxyV+XC6XMjK2q6gol6U4Qkgo13H+FkZDe/HFF0y5csAwTn8A6uv/V7s9eK9YMK1hXlpaWmmfYRi1OquwrKys0jhJXp1d7nIZKigorvd4X3rssUk+X5JFMu8HUDp92VBeXmD8/wQiM+YU86l2oqObymbz3zM0/KmW16eOG4ahN95YUK/jeev05Z+VX79gFR4ebtqbqeLicp08WdTox2E++U6gzSd/r+Xe8Ob3gCeB9J7cl0aMeEjDhg2uNp6b2/h1DsGhWbNYJSUla8eODLlcP6/nZbVadfHFl6hZs1jmkwfBWstDvY7ztzBQfydPBtZcqksdN61hHhcXp/z8/AqXLBQUFCg+Pr5WY3Nzc93b+fn5stvtiomJ8Sqn8vLAWfzTZqv/hwOByOk0dO4lg2hYoTSnmE8Nx99qeX3quJlzPyyMy+d9wZc/88yn4MfvkIq8+T1QlUB6T+4rNlsTXXbZ5dq6dUul2OWXd5fN1oTXDXVy111DNGFCxfWpLRaL7rprCHUuxFDH+VsYQGWmfTzatm1btWrVSllZWe59mZmZuvTSS2scm5qaqoyMDPd2VlZWrcYBABoWtRwAQps3vwdQN6NGjfa4f8SIB32bCIJCfPx56tMnzd0gtVgs6tPnZrVuXf8mKQITdRwAKjOtYW6xWHTPPfdo5cqVkqTy8nJt3rxZt99+u/bt26dhw4bpwIEDHscOHjxYH330kfsylnXr1mnQoEE+yx0AcBq1HABCW3W/B9Dw/vKXx6vdBuqib9/+atEiRpIUExOrPn1urn4AghJ1HAAqsxhnOhUmMAxDM2bMkMViUX5+vq6//nr17NlT27Zt00MPPaRZs2YpNTXV49hVq1Zp69atio6OVvPmzXX//fd7lYvT6VJODuu0AfAvLVs28/u1Ev2lllPHAfirQKjl3qjq90B9UMtr9uCD96uoqFDNmkVp9uy/mZ0OAlx6+r/09tsLddddg5WSwhnF1QnmWk4dBxAK6lLHTW2Y+xOKOgB/FMxvzBsadRyAv6KW1x61HIC/opbXDnUcgL+qSx2n2gMAAAAAAAAAIBrmAAAAAAAAAABIomEOAAAAAAAAAIAkGuYAAAAAAAAAAEiiYQ4AAAAAAAAAgCQa5gAAAAAAAAAASJIshmEYZifhDwzDkMvFSwHAv1itFlksFrPTCAjUcQD+ilpee9RyAP6KWl471HEA/qoudZyGOQAAAAAAAAAAYkkWAAAAAAAAAAAk0TAHAAAAAAAAAEASDXMAAAAAAAAAACTRMAcAAAAAAAAAQBINcwAAAAAAAAAAJNEwBwAAAAAAAABAEg1zAAAAAAAAAAAk0TAHAAAAAAAAAEASDXMAAAAAAAAAACTRMAcAAAAAAAAAQBINcwAAAAAAAAAAJNEwBwAAAAAAAABAEg1zAAAAAAAAAAAkSWFmJ4DAYBiGpk+fLovFouLiYl1zzTW69tprzU4LAcrhcOibb77Ru+++q0GDBumGG24wOyUg6FHH0dCo5YDvUcvRkKjjgO9Rx9HQqOWNg4Y5amXx4sUqKSnRE088IZfLpdtvv10dOnRQu3btzE4NASg+Pl79+/fXpk2bZBiG2ekAIYE6joZGLQd8j1qOhkQdB3yPOo6GRi1vHCzJglpZtGiRbrnlFkmS1WpVjx49tHTpUnOTQsCzWilBgK9Qx9FYqOWA71DL0Rio44DvUMfRWKjlDYtXEzU6evSoDhw4oIsvvti9r3Pnzvr3v/9tYlYAgNqijgNA4KOWA0Bgo44DgYOGOWrkcDjUokULWSwW977o6GgdPXrUxKwAALVFHQeAwEctB4DARh0HAgcNc9SotLS00j7DMBQeHm5CNgCAuqKOA0Dgo5YDQGCjjgOBg4Y5ahQXF6f8/PwKNw8oKChQfHy8iVkBAGqLOg4AgY9aDgCBjToOBA4a5qhR27Zt1apVK2VlZbn3ZWZm6tJLLzUxKwBAbVHHASDwUcsBILBRx4HAQcMcNbJYLLrnnnu0cuVKSVJ5ebk2b96s22+/3eTMEOhcLleFT9cBNA7qOBoTtRzwDWo5Ggt1HPAN6jgaE7W8YVkMXk3UgmEYmjFjhiwWi/Lz83X99derZ8+eZqeFAOVwOLR+/XrNnj1b559/vm699Vb1799fTZo0MTs1IGhRx9HQqOWA71HL0ZCo44DvUcfR0KjljYOGOQAAAAAAAAAAYkkWAAAAAAAAAAAk0TAHAAAAAAAAAEASDXMAAAAAAAAAACTRMAcAAAAAAAAAQBINcwAAAAAAAAAAJNEwBwAAAAAAAABAEg1zAAAAAAAAAAAk0TAHAAAAAAAAAEASDXOEuP/85z9mp1CjQMgRAMwUCHUyEHIEALMEQo0MhBwBwEyBUCcDIUf4BxrmCGkrV640O4VqnThxQuvXrzc7DQDwa9RyAAhs1HEACHzUcgQTGuYISeXl5friiy/0xRdfmJ1KlU6cOKGpU6eqvLzc7FQAwC9RywEgsFHHASDwUcsRjMLMTgAwwwcffKDy8nIVFBRoyZIlkqSkpCRdcsklcrlc+vvf/y6bzSa73a5jx46pW7duuuqqqyRJK1as0H/+8x8tXrxY3377rT777DPt379fa9eu1fz589W2bVu5XC69+uqratGihU6ePKn8/HwVFBSoqKhIM2bMkCTt27dPixYtUsuWLXXkyBFde+21uu666yRJBw4c0MaNG+V0OrVjxw53jmlpaYqKijLhFQMA/0MtB4DARh0HgMBHLUdQMoAQdvXVV1fat2TJEuPRRx91b5eXlxt9+vSp9Lhrr73W+Mc//mH8+9//NgzDMJ5++mlj//79hmEYxvLly42FCxe6H/vss88aX3zxhfG///3PMAzDKC0tNe655x6juLjYMAzDKCsrM2699VZjx44dFY7x3nvvGTNmzPDumwSAIEctB4DARh0HgMBHLUcwYUkW4BxXXnmlBg4c6N4+deqUTpw4UelxFotFVqtVycnJkqQJEyaoXbt2kqT//ve/Ov/8892PveCCC7R3715dcMEFkqQ1a9YoKSlJTZs2lSSFhYXp+uuv16efftpY3xYAhBRqOQAENuo4AAQ+ajkCFUuyAOdo166d8vLyNH36dEVHR6tVq1ZVrnPVt2/fKvd//PHH6tmzpyTp+++/15AhQ9zxrKws/fTTT+5LgaTTvzjOO++8hvtGACCEUcsBILBRxwEg8FHLEahomAPn+Oqrr/TGG29o7ty5atasmSTplVde8fhYq9XzRRoxMTEKCwvTP/7xD0nSbbfdpq5du7rjhmHo4osv1p133tnA2QMAJGo5AAQ66jgABD5qOQIVS7IgpIWF/fyZkcPhkNPp1N/+9jeNGjXKXczr47PPPlNJSYkuuOACXXfddbrssssqxC+88ELt3bu3wj7DMLRv374q85Ok7OzseucEAMGKWg4AgY06DgCBj1qOYELDHCEtKipKJ0+elCStX79eNptNLpdLRUVF7sccPXpUxcXFKi8v15YtW2r1vD169NDBgwe1atUq/eUvf9GVV16pP//5zyotLZV0+m7M33//vQ4cOOAes3btWveaW2e0a9fOXcRLS0v17bffevX9AkAwopYDQGCjjgNA4KOWI5hYDMMwzE4CMMunn36qZcuWqX379rrhhht02WWXadeuXZo1a5a6du0qq9WqmJgYbd26Vc2bN9ewYcOUmZmpAwcOaPr06brnnnuUmJio2267TeHh4ZJOF9477rhD77//vmw2mySpvLxcI0eO1IABA9S7d29JUmZmpubMmaPWrVsrOjpav/nNb9S9e/dKOY4fP14ul0u/+MUvvP5kFgCCEbUcAAIbdRwAAh+1HMGEhjnQwE6dOqU77rhD7733nrvIS9Ljjz+uu+++W507dzYxOwBAbVDLASCwUccBIPBRy2EWGuZAI9i6das++eQT/fKXv5TdbldBQYESEhLUp08fs1MDANQStRwAAht1HAACH7UcZqBhDgAAAAAAAACAuOknAAAAAAAAAACSaJgDAAAAAAAAACCJhjkAAAAAAACA/6+9Ow9vqsz////KQlJa6DqlslTB6rApA8UZlVEQYVxABEccXFAWF9SPCwwKoyIiAzIqVjYFRRwRPwUExQ+LMi4jjMjF9lV0lBYQRApqKXSDljakOb8/+BGpBdqkTU6W5+O6vMw5Ofc57yR33j28c5/7AJBEwRwAAAAAAAAAAEkUzAEAAAAAAAAAkETBHAAAAAAAAAAASRTMAQAAAAAAAACQRMEcAAAAAAAAAABJFMwBAAAAAAAAAJBEwRwAAAAAAAAAAEkUzAEAAAAAAAAAkETBHAAAAAAAAAAASRTMAQAAAAAAAACQRMEcAAAAAAAAAABJFMwBAAAAAAAAAJBEwRwAAAAAAAAAAEkUzAEAAAAAAAAAkETBHBHA7Xb73ba0tLTGur179+qHH36oT0gAAB+RywEgvJHHASD8kcuB4yiYI6wdPXpU11xzjXJycmo89/e//13vvvvuGds/+eSTmjNnTrV133//vR544AH9/PPPeu+993T48OFTtv36669VWFhY51iXLVtW520BIJqQywEgvJHHASD8kcuBX9jNDgCojxUrVigzM1Pt27eXJO3cuVMHDx7U7373O3366acaMWKEJMnlcundd9/VzTff7G3rcrn0xRdf6PHHH6+2T4fDoYyMDJ111lnyeDzq3bu3PvnkEzVp0qTadlu3btXIkSPVsmVLSdKxY8dUVFSkZs2anTLWL7/8Uueee65+97vfNdjrB4BIQC4HgPBGHgeA8EcuB35BwRxhy+Vy6ZVXXlHr1q01ePBgxcfH69ChQ4qNjdXvf/97HTt2TA8//LDsdrtKSkqUl5en5s2bq0ePHpKk1atX67rrrlNaWprWrVunrl27qnHjxnI4HKqqqpIk/fnPf9YPP/ygo0eP1kjodrtdN9xwgx588EFJ0qeffqrVq1drypQpslqtOnz4sIqLi5Weni5J+uMf/xj0ZD5z5kzNmjWr2rrWrVvrX//6V1DjAIDTIZfXzTfffKOVK1cqMTFR33zzjUaMGKELL7ww6HEAwK+Rx2t3++23a9OmTdXWWa1Wffzxx97iEACYiVxeu8LCQs2dO1dJSUnyeDwqLi7WPffco+Tk5KDGgeCgYI6w9dprr+mWW27RXXfdpSVLlujw4cMaPny4CgsLdf/992vFihWqrKzU888/r9mzZ9dIyP/3f/+nqVOnyjAMPfnkkxo9erSuu+46ORwOuVwuuVwuFRQUqG3btrrhhhs0e/bsasUJi8VSbX8LFy5UaWmphgwZIknav3+/kpOTtWTJkhrbBtO3335bbdnMWADg18jltfv+++81f/58TZkyRXa7XS+88IL++c9/Kisry5R4AOBk5PHaud1urV692lvoKS8v18yZMymWAwgZ5PLaPfbYYxo3bpw3l+/evVtjxozRa6+9Zko8CCwK5ghLubm5Onz4sMaOHatvvvlGvXr10l133aXhw4frjTfe0PPPP6/ExERJUnJysj755BP179/f2/7jjz9Wz549lZSUpLVr1yozM1MbNmzQm2++qZKSErlcLr300ktq2bKlWrVqpYULF6p58+anjefrr7/Wueeeq/T0dN12222qrKzUgAED9NRTT5leoLbb+ZoDCE3k8rrJysrSXXfd5c3nDz74oAzDMC0eADiBPF67I0eO6MYbb1SbNm2865YsWaI77rjDlHgA4NfI5bU7fPiwCgoKvMVySTr33HNVWFiow4cPq2nTpqbEhcChkoawlJubq7Fjx0qSRo4cqenTp2vu3Lk6cOCALrjgArVq1cq77Z133qkffvhBhYWFSk5O1vbt2/Xyyy/r/vvv13vvvacVK1bo+eef19GjR5WSkqJ9+/Zp4sSJGjVqVJ1i8Xg8+uijjzRmzBhNnz5de/fu1VtvvaUbbriBy+UB4AzI5bUrKyvT2rVr9cILL3jXORwO0+IBgJORx2vXpEkTDRw40LtcXl6uffv2VSu6AICZyOW1czgc2rt3r/Ly8qrlb7fbLafTaVpcCByr2QEA/hgwYID3sc1mU8eOHfXll18qNjZWS5Ys0U033aTbb79dt99+ux555BH97W9/0yuvvCJJSkxMVHx8vOLj42Wz2XT99dcrOTlZLVu2VExMjJo0aaIjR454928Yhh599FGtWLHilLFs2LBBw4YNk9Vq1fDhw/Xwww/rxx9/1N133x3Q9+DLL7/UwIEDdc011yg/P19r167Vn/70pxp3i96wYYMef/xx3Xnnnbr33ntVWloa0LgAoK7I5bXn8h07dig2Nla7d+/WAw88oDvvvFODBw/W3r17AxoXANQFebzu5+QnvP322+rTp09AYwIAX5DLa8/lTqdTN910k4YMGaItW7ZIkj744ANdddVVDGaJUIwwR1jasGGDSktL1bhxY+Xn52v9+vX66aeftH37dtlsNj377LPKyMjwbj9z5kyde+65kqS0tDS98cYbKigo0JIlS/T888/r+++/V15enoqLi+V2u7V//369//77ko4n9Ouuu05nnXXWKWPp1q2bd7uFCxcqPT1dhYWF+u9//6tOnToF7D3o0qWLpk2bpltvvVVOp1OxsbH6n//5n2p/7KTjvxY/88wzkqQZM2YoKytLEyZMCFhcAFBX5PLac3l+fr4sFosWLVqkrKwsORwOLVu2TE888YQWLFgQsLgAoC7I43U/J5eOj5z85JNPNHTo0IDFAwC+IpfXLZc/+uijKiws1JAhQ9S2bVtdccUVeuihhwIWE8xFwRxh6ZJLLpEkrV+/XkePHtX+/fs1aNAgORwOvfbaaxo7dqwaN27s3X7//v0aPXq0d9ntduuZZ57R3/72N0lSVVWVzj77bF122WWyWq2aOXOmevbsqcaNG2vJkiVKTU1V27ZtTxvP7t279dprr+nKK6/Uvffeq71792r06NFq3Lixrr766tMm9oceekhffvml5s2bp9/+9rc+vw+tWrVSv3799I9//EMOh0MTJ06s9vwdd9yhuLg47/Jtt92m3r17UzAHEBLI5cedKZdXVFTo8OHDGjFihHf0Sv/+/TV16lT9+OOPatGihc/HA4CGQh4/rrZz8hPWrl3rLTIBQKgglx9XWy5fvXq1zjnnHH388ceaOnWq5s+fr27duumiiy7y+VgIfRTMEdbefvttxcXF6aefftLAgQP15ptvymKxnPIX0BMqKyt17733yul0asGCBUpOTtZZZ53lTeaSdM4552jPnj3eX1P/+te/6g9/+EON4//444969913ZbPZNH78eO3evVv33Xefzj//fGVnZ2vNmjV655131KFDh1PG//3336uoqEjl5eV+vwf33XefevfurRdffLHGcwkJCdWWU1JSZLFYvPONAUAoIJefPpfHxMQoLi6u2o2RrFarWrZsqb1791IwBxASyONnPic/YeXKlerevbvfxwCAQCKXnz6Xl5SU6PXXX9eSJUtksVj0wgsvaPr06frrX/+qjz/+mGlZIhAFc4St7du3q1mzZmrWrJkeeughffXVV9q6dasMwzhjO6fTqaZNm6p169YaOnToKQvHXbp00ZIlS7RmzRo999xzuvLKK1VVVSWbzVZtu+TkZP35z3/2Lnfo0EFZWVkaM2aMDhw4oD/96U/605/+dNpY3nnnHR09erRGYdsXJSUlat26td577z1deuml1Z578cUX9ec//1nnnHOOd53H46n26zAAmIlcftzpcnmLFi1UUlKiY8eOqVGjRt71FovF+48QADATefy4M52Tn7Bx40bdfPPNfh8DAAKFXH7c6XL5li1b1KVLF1ksFu+6Bx98UO+8846+/vprRplHIArmCEuGYWjBggV64okn9J///EeSNGXKFCUkJGjRokW1XjI0Y8aMavurqqrSd999570sKCMjQ6NHj9arr76qHj16SJLeffdd3XTTTdXaxcTEeB9/8skn+vrrr9W8eXPdfffd1UYDno7D4aj3L5H//Oc/9dprr+mOO+5QTk6O2rdvL0k6fPiw5syZo4suushbMD948KASExMpmAMICeTyX5wu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gN577z0lJSXpwIEDcrlcGjlypCwWS61tly9fri1btigpKUmxsbEaMWKE7y8MAFBnw4YNU0VFhbKzszV79mz98Y9/VPfu3b2jGwEAgfXtt99qypQp3uVevXrprrvu0g8//KClS5fqrLPO8q5/7rnn1KdPH7NCBYCoVeeC+a8LH7/97W9rFMslKT4+Xuecc079IwMANKjY2FhvsVySmjVrVqNYfkJcXFyd9zt27FjNnDlTTZo0kSQ99dRTWrlypfr163fGdrm5uZo/f76WLFkiq9Wq8ePHa+XKlbruuuvqfGwAQN2dOJ+PjY3VXXfdJZfLpRUrVmjEiBE6fPiwmjdvLrvdLpfLpbPPPluTJk0yOWIAiDwJCQk11u3atUvjx4/3FstPSExMDFJUAICT+XTTz5OL5klJSTp06NApt7PZbPWLCgDQ4BwOh7766ivvcvv27bVp06Ya23377bfatm1bnfe7detW5eTkeJfbtm1bbfl0srOz1bdvX1mtx/8U9e7dW/Pnz6/zcQEAvnO73d7HDodDN954o5YuXapXXnlF1157rZo3b66YmBjuSQQAAVJaWlpt+cUXX1RVVdUpr9KvqKgIUlQAgJP5NCXLrFmzvEVzh8Oh22+/XW+99ZaSk5P1+uuv68MPP1THjh31+9//PmABAwD8c+edd2ry5Ml6+eWX1aFDB/3mN7/Riy++qHbt2um8887ToUOHtHHjRn3//feaN29enfc7b948nXfeed7lHTt2qGvXrrW227Rpk66//nrvcrt27bRt2za5XC45HA7fXtz/z2736XdgVVX5tj3Ck91u9blv+IP+FB2C1Z8CwTAMzZ8/X3fffXeN51q3bq3WrVtr0KBBJkQGANGjY8eOevrpp9WjRw99+umn+vDDD/XWW2/pueee01VXXaXu3burqqpKixcv5up9ADBJnQvmubm5NdaNGjXK+/j3v/+98vPzddlll+nyyy+v0z7PNO/tvn379OKLLyojI0M//vijRo0aVW1uRea9BQDf2Gw2jR8/Xtu3b9f777+vf//73zpy5IjWrVunLVu2qEWLFurZs6deeuklny7/zMzM9D7eu3ev9u3bpyeffLLWdvn5+UpKSvIuJyQkyO12q7i4WM2aNfPptUmS1WpRUlLdp5KRpIoKroiKBomJcUEZLUt/ig7B6k+B8Oabb2rXrl1asGCBbr/9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\n",
      "text/plain": [
       "<Figure size 1500x800 with 8 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.font_manager as font_manager\n",
    "\n",
    "# 设置中文字体\n",
    "font_path = 'simsun.ttf'  # 替换为支持中文的字体文件路径\n",
    "prop = font_manager.FontProperties(fname=font_path)\n",
    "sns.set(font=prop.get_name())\n",
    "\n",
    "# 数值类型字段\n",
    "numeric_columns = ['x1','x2','x3', 'x4','x5','x6','x7','x8']\n",
    "\n",
    "# 标签分组字段\n",
    "group_column = 'target'\n",
    "\n",
    "# 设置子图布局\n",
    "fig, axes = plt.subplots(2, 4, figsize=(15, 8))\n",
    "axes = axes.flatten()\n",
    "# 绘制箱线图\n",
    "for i, column in enumerate(numeric_columns):\n",
    "    sns.boxplot(x=group_column, y=column, data=train_data1, ax=axes[i])\n",
    "    axes[i].set_title(f\"箱线图：{column}\")\n",
    "\n",
    "# 调整子图之间的间距\n",
    "plt.tight_layout()\n",
    "\n",
    "# 显示图形\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0005ee7f",
   "metadata": {},
   "source": [
    "##### 上述的现象表明：\n",
    "1、x1,x2,x4,x5,x6对target的影响几乎没有，后续删除。\n",
    "2、x7,x8影响很大。\n",
    "3、对于x3,可以进行实验，看是否保留。\n",
    "x3出现的情况可能有以下几点原因：\n",
    "1）数据中只有一个唯一值：箱线图的箱体部分代表数据的四分位数范围，如果数据中只有一个唯一值，那么箱体的上下边界将会重合，形成一个点。这表示所有的数据都聚集在同一个值上，没有分布的变化。//排除此情况\n",
    "2）数据存在极端值：如果数据中存在极端值，那么箱线图的箱体可能会变得非常小，甚至缩为一条线。这是因为极端值远离了其他数据的范围，导致箱体的上下边界都很接近极端值，而不是覆盖大部分数据。\n",
    "3）数据分布高度集中：如果数据分布非常集中，没有明显的离散程度，那么箱线图的箱体可能会变得非常小，甚至不可见。这表示数据的变化范围非常狭窄，大部分数据都集中在一个区域内。//下面验证想x3为什么会出现这种特征分布，思路是统计出x3列的每个值出现的频率，看是否对应上面两种的情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "bd71f97b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Value</th>\n",
       "      <th>Count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>41</td>\n",
       "      <td>617853</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>47</td>\n",
       "      <td>545</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>15</td>\n",
       "      <td>279</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7</td>\n",
       "      <td>260</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>71</td>\n",
       "      <td>147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>34</td>\n",
       "      <td>105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>25</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>60</td>\n",
       "      <td>81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>70</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>5</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>14</td>\n",
       "      <td>66</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>35</td>\n",
       "      <td>62</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>20</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>27</td>\n",
       "      <td>56</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>40</td>\n",
       "      <td>55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>30</td>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>11</td>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>64</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>50</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>49</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>32</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>38</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>55</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>3</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>56</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>22</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>29</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>74</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>17</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>36</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>19</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>53</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>39</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>23</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>21</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>45</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>18</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>57</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>52</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>42</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>61</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>26</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>24</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>59</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>58</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>28</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>62</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>67</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>12</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>33</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>31</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>46</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>68</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>16</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>65</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>62</th>\n",
       "      <td>43</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>48</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>51</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>44</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>73</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>67</th>\n",
       "      <td>63</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>68</th>\n",
       "      <td>69</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>72</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>13</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Value   Count\n",
       "0      41  617853\n",
       "1      47     545\n",
       "2      15     279\n",
       "3       7     260\n",
       "4      71     147\n",
       "5      34     105\n",
       "6      25     100\n",
       "7      60      81\n",
       "8      70      74\n",
       "9       5      67\n",
       "10     14      66\n",
       "11     35      62\n",
       "12     20      60\n",
       "13     27      56\n",
       "14     40      55\n",
       "15     30      49\n",
       "16     11      42\n",
       "17     64      32\n",
       "18     66      29\n",
       "19     50      29\n",
       "20     49      28\n",
       "21     32      25\n",
       "22     38      22\n",
       "23     55      22\n",
       "24      3      20\n",
       "25     56      18\n",
       "26     22      17\n",
       "27     29      17\n",
       "28     74      15\n",
       "29     17      14\n",
       "30     36      13\n",
       "31     19      12\n",
       "32     53      11\n",
       "33     39      11\n",
       "34     23      10\n",
       "35      0       8\n",
       "36     21       7\n",
       "37     45       7\n",
       "38      9       7\n",
       "39     18       7\n",
       "40      4       6\n",
       "41     57       6\n",
       "42      2       5\n",
       "43     52       5\n",
       "44     42       5\n",
       "45     61       4\n",
       "46     26       4\n",
       "47     24       3\n",
       "48     59       3\n",
       "49     58       3\n",
       "50     28       3\n",
       "51     62       3\n",
       "52     67       2\n",
       "53     12       2\n",
       "54     33       2\n",
       "55     31       2\n",
       "56     46       1\n",
       "57     10       1\n",
       "58     68       1\n",
       "59     16       1\n",
       "60      1       1\n",
       "61     65       1\n",
       "62     43       1\n",
       "63     48       1\n",
       "64     51       1\n",
       "65     44       1\n",
       "66     73       1\n",
       "67     63       1\n",
       "68     69       1\n",
       "69     72       1\n",
       "70      6       1\n",
       "71     13       1"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取第三列数据\n",
    "column_x3 = train_data1['x3']\n",
    "\n",
    "# 统计每个数值对应的数量\n",
    "value_counts = column_x3.value_counts().reset_index()\n",
    "\n",
    "# 创建结果表格\n",
    "result_table = pd.DataFrame({'Value': value_counts['index'], 'Count': value_counts['x3']})\n",
    "\n",
    "# 设置pandas显示选项，完全显示所有行\n",
    "pd.set_option('display.max_rows', None)\n",
    "\n",
    "# 打印结果表格\n",
    "result_table"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9eb79721",
   "metadata": {},
   "source": [
    "###### 上述结果可知，箱线图的中位线在41左右，而正好41这个值出现的频率时远远远远超过其他值出现的次数，所以导致上下四分位线都和中位线集中在一起\n",
    "    因此这在决策树中会巨大的影响决策步骤，初步判断可以排除该特征。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a95f5cf2",
   "metadata": {},
   "source": [
    "##### 针对问题3——从common_ts中提取小时，绘制每小时下标签分布的变化。\n",
    "    这里为了不影响任务1中的train_data和test_data，依然沿用2.1任务中的train_data1和test_data1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "0dff66e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data1['common_ts'] = pd.to_datetime(train_data1['common_ts'], unit='ms')\n",
    "test_data1['common_ts'] = pd.to_datetime(test_data1['common_ts'], unit='ms')\n",
    "train_data1['common_ts_hour'] = train_data1['common_ts'].dt.hour\n",
    "test_data1['common_ts_hour'] = test_data1['common_ts'].dt.hour"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "0d1db24b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>x7</th>\n",
       "      <th>x8</th>\n",
       "      <th>target</th>\n",
       "      <th>common_ts_hour</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-18 09:44:28.244</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>107</td>\n",
       "      <td>206</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"484\"}</td>\n",
       "      <td>2023-07-11 13:42:21.469</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-15 07:49:53.040</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-16 00:36:55.688</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>17</td>\n",
       "      <td>366</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-16 07:15:51.442</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>92</td>\n",
       "      <td>383</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap               common_ts  x1  x2  \\\n",
       "0     0   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-18 09:44:28.244   4   0   \n",
       "1     1   26  {\"key3\":\"67804\",\"key2\":\"484\"} 2023-07-11 13:42:21.469   4   0   \n",
       "2     2    8                        unknown 2023-07-15 07:49:53.040   4   0   \n",
       "3     3   11                        unknown 2023-07-16 00:36:55.688   1   3   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-16 07:15:51.442   0   3   \n",
       "\n",
       "   x3   x4   x5  x6  x7  x8  target  common_ts_hour  \n",
       "0  41  107  206   1   0   1       0               9  \n",
       "1  41   24  283   4   8   1       0              13  \n",
       "2  41   71  288   4   7   1       0               7  \n",
       "3  41   17  366   1   6   1       0               0  \n",
       "4  41   92  383   4   8   1       0               7  "
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "37a68e21",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkoAAAHICAYAAACxs8XXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6uUlEQVR4nO3de3gU5d3/8c/OhnAIJCQ0pEA4hLQQInARYqvFE8eKcqxikXJSbBWhKlQJ+nhAqXJWTlJoFQVRoFVan4gFCzyKWgqIGBQI4aiQgBsC5CSQkOz8/uDHlCUZSDab7CZ5v66LS3bumXu+e2eXfJy5Z8ZhmqYpAAAAlGD4uwAAAIBARVACAACwQVACAACwQVACAACwQVACAACwQVACAACwQVACAACwQVACAACwQVACAACwQVACqpni4mLt2LHD32XUGFlZWTp48KC/y6h0hYWF2rlzp7/LAKodghJQxfbu3at77rlHAwcO9CrwvPbaa3rssccqVINpmlq1apUWLVqknj17lnv77du36/bbb9fQoUP19ttva+7cuXrrrbdU2hORjh07pltuuUXr1q2rUM0VNX78eP3+97/3WLZ37149/PDD+uKLL6qkhi+//FI333yzvvzyyyrZ3yXnz5/X7NmzNWPGjErdx6RJk5SQkKCPP/5YknT69Gk99NBD6t69u1JSUipt30BlIigBVSw+Pl633nqrbrrpJl1//fXl3n7s2LEVrsHhcGjYsGEaP368V9v//Oc/V0JCggYMGKARI0Zo4sSJysvL00svvVRi3YiICN12222KjY31ut49e/bI7XZ7vb0kdevWTb/4xS88ll36WfjKN998c9X26Oho3XLLLYqOjvbZPsuiXr16Gj16dKXvY8iQIWrRooV69Ogh6eLP/vbbb1fnzp3VpUuXSt0/UFkISgB84ne/+50++OADpaWleSwPCQnRiy++qHbt2nnd99q1aysclIYPH67hw4dXqI9rSU5Ovmp7VFSUpk+frqioqEqtA4DvEJQA+ERwcLASEhL0r3/9y2d9ut1u7dy5U++9957P+qwMhYWF+tvf/qY9e/b4uxQAPhbk7wIAeDp//rxef/11hYWFqU6dOsrIyFDfvn113XXXeaz39ddfa+PGjcrOzlZ2drZefPFFhYaGWu3/+Mc/tH//foWGhurEiRMaP358pR/JiI6O1oEDB6zX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goODPdr379+vXbt26c477yx1kje8U5arr+yuvJL+e/UVAADwTpmC0m9+8xv94Q9/0KOPPiqn01mivV27dmrRooXeeOMNDR48WC1btvR5obWRr66+AgAA3ilTUOrdu7cefPDBq64TEhKicePGadq0aXr22Wd9Uhwu4uorAAD8o0xXvXXu3LlMnTmdTl24cKFCBQEAAASKMgWl77//XoWFhddcr6ioSC6Xq8JFAQAABIIyBaUBAwZo5MiRWrt2rfLz80u0m6apr776Sr/73e/UvXt3X9cIAADgF2Wao5SQkKBnn31WL774op588klFRUWpSZMmqlOnjvLy8nTs2DEFBQXpkUce0bBhwyq7ZgAAgCpR5vsodezYUatXr9aRI0e0a9cuZWZmyjRNNWrUSDExMUpMTCxx2wAAAIDqrNw3nIyJiVFMTExl1AIAABBQvHrWGwAAQG1AUAIAALBBUAIAALBBUAIAALBBUAIAALBBUAIAALBBUAIAALBBUAIAALBBUAIAALDh86C0Zs0aX3cJAADgFz4PSvn5+b7uEgAAwC/K9Ky3nj17yuFwXHM90zSVlZWl0aNHV7gwAAAAfytTUBoyZIjGjRtXpg4XL15coYIAAAACRZlOvUVERJS5w/DwcK+LAQAACCRlCkr33ntvmTu86667vC4GAAAgkPh8MndwcLCvuwQAAPCLCgWljIwMHTlyxFe1AAAABBSvgpLL5dKQIUM0atQoa/L2d999p7fffls5OTk+LRAAAMBfvApKixcv1pQpU7Rp0yZ17dpVktS6dWsNGzZMb731lk8LBAAA8BevgtKPf/xjderUSZI87q/kdDpVWFjom8oAAAD8zKuglJeXZ/3dNE3r7263W99++22FiwIAAAgEXgWln/70p3r55Zf13XffqbCwUKdPn9aOHTv06KOP6sYbb/R1jQAAAH5RpjtzX2nw4MHaunWrpkyZotTUVC1atEht27bVmDFj1KdPH1/XCAAA4BdeBSVJuvHGGzl6BAAAajSf33ASAACgpvDqiFJ+fr4WLVqk9evX6+TJk3I6nWrZsqVGjBhRrsedAAAABDKvjig988wzioyM1FtvvaUvv/xS27Zt06JFi5Sdna0FCxb4ukYAAAC/8CoohYaGasyYMWrZsqXq1q2revXqqXXr1ho7dqzOnTvn6xoBAAD8wqugFB4ebtvWrFkz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UYbhICgBAGqO6nyqBZUj3ZWnQxk5/i6j3AhKAACfqu6nWoDLEZQAAD5V3U+1AJcjKAEAKkV1PdUCXI77KAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANggKAEAANgI8ufOXS6Xtm7dqvfee08jRozQ7bffbrWlp6dr7ty5io2N1fHjxzVx4kQ1adLEak9OTtaOHTsUHh6uBg0a6KGHHrLaCgoKNG3aNEVERCgrK0v33HOPOnfubLXv3btXb7zxhmJiYpSVlaWkpCTVr1+/at40AACoNvx6RCkqKkqDBg1Ss2bNZJqmR9uECRP0wAMPaNy4cbr77ruVlJRkte3bt0/Lly/X888/r4kTJyojI0Nr16612ufPn6+YmBg99thjevLJJzV58mTl5+dLkgoLCzVhwgRNmjRJ48ePV2JioqZPn141bxgAAFQrAXHqzTA8y0hJSVFBQYHi4+MlSQkJCUpLS9OhQ4ckSStXrlS/fv2s7Xr37q3ly5dLks6fP681a9Zo4MCBkqSQkBDFxcUpOTlZkrRhwwa1bdtWUVFRkqQePXooOTlZeXl5lf9GAQBAtRIQQelK27dvV6dOnTyWtW/fXikpKVb75afS4uLitHfvXhUWFmrfvn1q1KiRIiIiPNp37dolSdq2bZtH3yEhIYqKitKePXsq8R0BAIDqyK9zlOy4XC6Fh4d7LAsNDVVWVlap7WFhYSoqKlJ2dvY1t83MzFRcXJxHe1hYmNXuraAg32dOp7Piffqij9rS16V+fDnu9EVf9FWxvmo7X46pv1T3z0NABqXCwkLVq1fPY5lpmgoODpYkXbhwoUSbJAUHB6uwsLBEf6Zpqk6dOlbfpbVf6tsbhuFQeHiI19tXptBQ301Sr+l9BWJN9EVf9AWJ8fDn+w/IoBQZGSmXy+WxLDc315pXFBkZqTNnzlhtOTk5qlu3rho3bqzIyEhlZ2dfddurtXvD7TaVm3vW6+3tOJ1GhT8cubnnJPnmQ1bT+8rNPafiYrfPxp2+6Iu+Kt5XbXdpLKvzeATq5yE0tH6ZjlQFZFDq2rWrZs+ebb02TVP79+9Xly5drPbdu3fr+uuvl3TxKrjExERJUseOHXXy5EmdOXPGOgWXmpqqXr16Wdtu3rzZ6js/P1/Z2dlq165dhWouKgrMD7AvP1g1va/iYrfPfo70RV/0FTh91QS1fTz8+f4D4qSn2+32uD1At27d5HA4lJaWJknasWOHunTpoubNm0uSRo8erXXr1lnbrF+/XiNGjJAkNWzYUEOGDNGHH34o6WIQOnDggPr27StJ6t+/vw4ePGjNSdq4caMGDx7MfZQAAEAJfr/h5CeffKItW7YoIyNDP/zwgwYNGqQ6dero1Vdf1YIFC9SmTRtlZGRo6tSp1nadO3fWiBEj9Pzzzys0NFQxMTHWESNJmjRpkmbMmKEFCxbI5XJp5syZ1hykkJAQzZ8/X7NmzVKrVq106tQpTZ48ucrfOwAACHx+DUpRUVEaOnSohg4dWqItOjpas2bNst12wIABGjBgQKltdevW1ZQpU2y37dChw1X7BgAAkALk1BsAAEAgCsjJ3AAAwL8MwyHDcHi9vdttyu02r71igCMoAQAAD4bhUOPGDSp0o8fiYreys31/65yqRlACAAAeDMMhp9PQnHe+VLqr/M9CjY5qpCeGJ1boiFSgICgBAIBSpbvydCgjx99l+BWTuQEAAGwQlAAAAGxw6g0AENAqcvVVTbnyCv5DUAIABKyKXn116corwhK8RVACAASsilx9dfmVVwQleIugBAAIeFx9BX9hMjcAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAIANghIAAICNIH8XAABAVTEMhwzD4dW2brcpt9v0cUUIdAQlAECtYBgONW7cQE6ndydTiovdys4+S1iqZQhKAIBawTAccjoNzXnnS6W78sq1bXRUIz0xPFGG4SAo1TIEJQBArZLuytOhjBx/l4FqgqAEAEANUZE5WBLzsEpDUAIAoAao6Bws6b/zsPBfBCUAAGqAiszBkjzn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VX5+vtxutw4fPqwHH3yQoOQjBw4c0NChQz1u6HnmzBklJSVp5MiRfOb9iKAEAABgg1NvAAAANghKAAAANghKAAAANghKAAAANghKAAAANghKAAAANghKAGq09evXq2PHjnr66adVVFQkSVq5cqXat2+vJUuW+Lk6AIGO+ygBqPF69uyp+fPnq1OnTtay9u3ba+fOnQoJCfFjZQACHUeUAAAAbBCUAAAAbBCUANR6Gzdu1Isvvqg333xTzz33nPbt2ydJOn/+vKZOnaqRI0da637zzTe666679Pe//13SxQcjz5gxQwkJCUpNTdXGjRu1cOFC9e3bV19//bVf3g8A3wnydwEAUBU2bNig3bt3l1i+e/durVmzRn/605/kcDiUn5+v++67T8uWLVPDhg01ZswYPfXUU9b6nTp1Uo8ePazXPXr0UI8ePbR792599tlnat++vR555BEFBfHPK1AT8E0GUCv06dPHYzL3888/L0l69dVXNXr0aDkcDklSw4YN1b17d61evVq//e1vy9y/w+FQdna2brvtNknSww8/7LviAfgNp94A1GopKSlq27atx7KYmBivTpv169fPV2UBCBAEJQC1mmmacjqdHsuufF1WhsE/qUBNw7caQK123XXXKT093WPZ0aNH1aFDB0lScHCw3G63R/ulG1cCqPkISgBqtXHjxmnVqlXW64KCAm3evFnDhw+XJP3oRz9SVlaWCgoKJEmnT5/Wxo0bVVxc7Jd6AVQtJnMDqNHWrl2rzMxMrVq1SrGxsWrQoIHefPNNSdKbb76p3//+9/r+++81c+ZMRUVF6cSJE3r22WcVGhoq6eLptLFjx2rUqFGKjo5W06ZN1bt3b23ZskU33HCDjh8/roMHD+rgwYNauXKl4uPj1bdvX4WHh/vzbQPwER5hAgAAYINTbwAAADYISgAAADYISgAAADYISgAAADYISgAAADYISgAAADYISgAAADYISgAAADYISgAAADYISgAAADYISgAAADb+H3RcQ8Kcx4g+AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 提取common_ts_hour列\n",
    "common_ts_hour = train_data1['common_ts_hour']\n",
    "\n",
    "# 统计每小时下标签的分布\n",
    "label_counts = common_ts_hour.value_counts().sort_index()\n",
    "\n",
    "# 绘制柱状图\n",
    "plt.bar(label_counts.index, label_counts.values)\n",
    "\n",
    "# 设置图表标题和轴标签\n",
    "plt.title('Label Distribution by Hour')\n",
    "plt.xlabel('Hour')\n",
    "plt.ylabel('Label Count')\n",
    "\n",
    "# 显示图表\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "c6af61a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAHICAYAAABNpu4dAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFJklEQVR4nO3dfXhU9Z3//9ec3HGTDEkwRCEoMbVJI7AksNtv8Q4IKsqNuobVQhS8WbVSt9AK1FUEshbBokikLdalgmigIrtdCoVWvPCmUk0jBEWSAEGEJDAkkhvCTUIy5/cHP6aMCTqZTGYmc56P6/Iycz7nfM77fOYk8+Lcjc00TVMAAAAWZQS6AAAAgEAiDAEAAEsjDAEAAEsjDAEAAEsjDAEAAEsjDAEAAEsjDAEAAEsjDAEAAEsjDAEAAEsjDAFAF1VaWqqamppAlwF0eYQhwI927Nih+fPna/ny5Zo2bZpSU1NVWFgY6LJ87vjx4/rtb3+rN998U88884zy8/M9Wm779u26+eabtWTJEo0bN07333+/nn/+eV133XU6evRoJ1cdGE6nU/PmzWv3clu3btXUqVN1/Phx3xf1/9uyZYsGDhyoJ598Us3NzZKk/Px8paamavny5Z22XsDvTAB+8dlnn5nZ2dnm6dOnXdOWL19uvvbaa36tY/fu3WZLS0unruMnP/mJeezYMdM0TXPHjh3mLbfc4tFyy5cvNw8ePGiapmnOnj3bXL16tWmapvnee++ZW7du7ZxiO6CmpsY8dOiQ18u/+eab5iOPPGL+y7/8i1fL5+TkmPv37/d6/Z4YOXKk+emnn7pN++53v2s2NDR06noBf+LIEOAnzzzzjHJyctStWzfXtAceeEBVVVV+rWPjxo1yOp2duo69e/cqISFBkpSRkaFNmzZ5tFxKSoquuOKKVtOvu+46RUZG+rRGX9i5c6cOHz7s9fITJ07U7NmzfVgRAG8QhgA/OHDggD777DONHDnSbXp4eLimTZvmlxqcTqd27Niht956q9PXdebMGbfXNpvNo+VGjx7d5nSbzabrrruuw3X5Unl5uZYtW9bhfsLDw31QDYCO4LcQ8INdu3YpMTFRdru9VVtUVJSkc9eAfPTRR+rXr5+++OILTZo0SWlpaTpz5oyee+457du3T6tXr5YkffbZZ5o7d65ycnL0r//6r3r77bc1d+5cLV26VG+//bbCw8NVXl6uWbNmKSkpSdK56z/q6upkGIZ+//vfyzAMJScn6//9v//n8XY0NTXpxRdfVExMjGw2m2pqavTTn/5UUVFRMk1Ta9eulSSdPHlSa9askaR2r+Pb1NTUaOXKlerTp4/CwsL05ZdfatKkSerfv78kadmyZSouLlZ5ebnWrVun3/3udyovL9fBgwe1evVq2Ww2HT9+XK+88oouv/xyVVZWKioqSjt27NCNN96oH/7wh5Kk9957T3/9618VHx+vyspKTZ06VSkpKZKkwsJC7du3T+Hh4dq2bZu+/PJL9ezZUxMmTJAkvfrqq9q/f3+b9d94440aMWKET8fjxRdfVENDgw4ePKjHH39caWlpamlp0cKFC/Xaa68pLy9PN998s/70pz9p/vz5euCBB/TQQw/5rIaO7Lvbtm3Txx9/rN///vfKz89XRUWFiouLtWnTJj333HMaPHiwz+oELirQ5+kAK1i+fLl55513XrT9s88+Mx955BHT6XSapmmaJ06cMO+8807zxIkTpmma5uHDh82cnBy3ZfLy8sz169e7Xufk5JhPPfWU2djYaJqmaf71r381586d22pdI0eONM+ePevVdvziF78wN23a5Hr99ttvX3QdHXXhNUMXmjFjhvnmm2+6Xu/atct8/PHH3eY5dOiQOWHCBPOll14yjx8/btbX15s///nPXeM7c+ZMs7i42DX/XXfdZR46dMisqqoyTdM0Dxw44NbnkSNHzKysLNfYXljjhx9+2KHtPHz4cIeuGZo9e7br/fz000/NO+64w22e8ePHm+Xl5aZpmmZDQ4O5cOHCdq1j5MiR5vPPP2/m5+e7/rvwmiFf7LumaZqTJ082X375ZfPdd981TdM0f/3rX5u7du1qV62AtzhNBviBaZqKiIi4aPuyZct07733uk4nRUdHa8SIEa4jLZ566KGHXNfWXH755fryyy+9L/prqqqq9O677+qWW25xTRs9erQ++ugjORwOn63n20yaNEnXXHON63VERESrO81sNpsOHDigUaNGKS4uTjExMXr22Wdd4/v5559rwIABrvkvu+wy1dbW6pJLLpEkvfLKK7rttttc7Zdeeqkuu+wy7dixoxO3zDu33nqr61TboEGD9NVXX7ldx3THHXdo8+bNkqT3339fWVlZ7V7H+SNm5/+7kK/2XZvNptraWt1www2SpB/96EccFYLfcJoM8IOYmBg1NDRctL2oqEjz5893m5acnKw///nP7VrPhdfm2Gw21+3QvvD555+rX79+ra7/6devn4qLi5WYmOizdX2TYcOG6c9//rPWrFmj2NjYi15zM2DAAKWnp7fZNmHCBL377rsaM2aMGhsbVVVVpauuusrVXlJSoj59+riFiiuuuEKG4dm/H1etWqWysrI227Kyslwf+L7Qr18/t9d9+vTRkSNHXKcNx48fr2nTpunBBx/Up59+qpkzZ/ps3ZLv9l1JGjt2rK/KAtqFMAT4wZVXXqnDhw+rpaVFYWFhbm2lpaUyTbPV9K+/DrS2apTOXQBsmqbf6liyZIkaGxs1e/Zs2Ww2lZeXa+vWra3m+6bgcvnll2v//v164403dObMGT377LNud/mZpqlRo0Z5fWRiypQpXi3nC19/ny655BLFxcWprKxM3bp18zjQebs+yft919e1AZ5izwP8IDMzU2FhYSoqKnKb3tDQoF27dunqq69WeXm5W9uhQ4f0ve99T5IUGRnZ6nZ4b4/6XBhe6uvrv/GI1YXS0tJUWVnZanpFRYXS0tK8qqW9mpqa9Nprr2nGjBke36HWlrfeekuxsbG66qqrNH78eNdRlPOuvPJKHThwwG2aw+HQyZMn3aZ9PQgeOXLE65q89fX9oqqqqtXjCe644w7NnTvX7fSir/hz3wU6C2EI8IOoqCg99thjysvL09mzZyWd+0D43e9+p1tvvVWPPvqo6+4rSWpsbNR7772nyZMnSzr3r/vq6mo1NjZKOveE561bt6qlpaXdtfTv3991jc22bds8vrX7sssuU0ZGhv72t7+5pn388cfKyMjQZZdd1u46vNHS0iLTNHXq1CnXtPOnsj7//HPV19d71M+oUaO0c+dOvf7663rwwQd1zTXX6OWXX3a1T506VWvWrNHp06dd0zZv3qyePXu69dO/f39XANq/f3+bYdGTbepIOLgwYH/yySfKyMhwXft03siRI1VXV6fMzEyv13Mx/tx3gc7CaTLAT6ZOnaqIiAhNmzZNffr0UUREhO677z5FR0dr2LBhOnr0qBYtWqTExEQdOXJEc+bMcd2KbxiGHnnkEd17771KSkpSnz59NHr0aG3fvl3f//73dfDgQe3fv18rV67UrFmzJJ27bmXfvn16//33df3117vqmDZtmubOnavk5GQN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0+MLqIPiNBkAAECgEIYAAIClEYYAAIClEYYAAIClEYYAAIClEYYAAIClEYYAAIClEYYAAIClEYYAAIClEYYAAIClEYYAAIClEYYAAIClEYYAAIClhQe6AACdwzBsMgyb18s7naacTtOHFQFAcCIMASHIMGyKje2hsDDvD/62tDhVW3uKQAQg5BGGgBBkGDaFhRla/MYnKnecaPfySYkxenzyUBmGjTAEIOQRhoAQVu44obKKukCXAQBBjQuoAQCApRGGAACApRGGAACApRGGAACApRGGAACApRGGAACApXFrPdrUkacX8+RiAEBXQhhCKx19ejFPLgYAdCWEIbTSkacX8+RiAEBXQxjCRfH0YgCAFRCGACCIcf0e0PkIQwAQpLh+D/APwhAABCmu3wP8gzAEAEGO6/eAzsVDFwEAgKURhgAAgKURhgAAgKVxzRCAb9WR27slbvEGENwIQwC+UUdv75a4xRtAcAt4GNq6dasOHjyoHj166P3339f8+fOVmJio8vJyLVmyRCkpKaqsrNSMGTPUu3dv13IbNmxQYWGh4uLi1KNHDz388MOutsbGRi1YsEDx8fGqrq7WxIkTNXjw4EBsHtDldeT2bolbvAEEv4CGoQ8//FBHjhzRgw8+KElqaGhQQ0ODEhMTNX36dOXm5io9PV07d+7UrFmztGLFCklSSUmJVq1apXXr1skwDD399NPauHGjxo0bJ0launSpkpOTNXXqVJ08eVLZ2dlat26doqOjA7atQFfH7d0AQlVAL6DOy8vTbbfd5nr90EMPKSUlRUVFRWpsbFR6erokKSMjQ6WlpSorK5Mk5efna+zYsTKMc+WPHj1aq1atkiSdOXNG69ev14QJEyRJPXv2VFpamjZs2ODPTQMAAF1EwMJQfX29vvzyS+3atUtPPfWUZsyYoZ/+9KdqbGxUQUGBBg0a5DZ/amqqioqKJEkFBQVup73S0tK0Z88eNTU1qaSkRDExMYqPj3dr37Vrl1+2CwAAdC0BO0126NAhnT17ViUlJXrmmWckSc8//7xWr14th8OhuLg4t/ntdruqq6slqVV7r1691NzcrNra2m9d1lvh4f7NjecvVu3IRasdXXeg+wgUxj5wfQVy7IORP/cHxj4wGPfgELAwdObMGdlsNk2ZMsU1bcKECZozZ46uuuoqdevWzW1+0zQVGRkpSTp79myr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Vlam9957T1FRUSorK9N1112nkSNHSpJqa2v17LPPqn///jpy5IgeeughXXHFFa5lP/zwQ/3xj39Uv379dPr0af3sZz9TWFiYpHOn7BYvXiybzaZTp07p+uuv14gRI3xSMwAACC3tDkM2m0233HKLT1b+5JNPatGiRbriiit09uxZjRs3ToMHD1bv3r01d+5cjRs3TjfeeKOOHDmihx9+WP/7v/+rsLAwffXVV8rNzdX//u//qkePHnr55Zf13//933r44YclSfn5+WpsbNRTTz0lp9Op7OxspaSkqH///j6pGwAAhA6fP3Txr3/9q8fzjh49WoZxroSIiAj16dNHDodDR48e1ccff+w6SnTZZZepW7durr7Xr1+va6+9Vj169HD1s3r1apmmKUlavXq1br/9dkmSYRgaPny41q5d66tNBAAAIaTdR4YkqbKyUq+88ooOHTqks2fPuqabpqmysjJt377do34efPBB188HDhxQeHi40tLStHnzZqWmpio8/B/lpaWladeuXbrhhhv08ccfa/z48a62lJQU1dbWqry8XN26ddPhw4d19dVXuy3b0TAUHu7fh3WHhRlu//d0fn+uk76Cuy9fCPW+gv09DNa+4Du+fH/gPa/C0KJFi3TXXXfp8ssvl81mc2tbtWpVu/pqaWnR888/r7///e9avHixDMOQw+FQXFyc23x2u13V1dWSpGPHjrVq79Wrl6qrqxUREaFevXq51WW321VVVdWuui5kGDbFxfX0evmOsNu7d8l10Rd9dYW+grEmq/QFd4xtYHkVhpKSkjR8+PA222bOnNmuvsLCwjRr1iwdP35cjz76qH7xi1+0+bUepmkqMjJSkr6xvbGx8RuX9YbTaaq+/pTXy3sjLMyQ3d5d9fWn1dLi9Hj+jji/Lvrq+n1JvvnjGup9BfN7GMx9wXfa+7cenrPbu3t8xM2rMNTc3Kzm5ma301jnff1Ikafi4+OVlZWlFStWaOjQofroo4/c2uvr610XQCckJKi2trZVe2Jiok6fPq26ujqZpumq5XxbRzQ3B2YnbWlx+m3dvlwXfQW2L18J9b6C+T0M9b7gjrENLK9OUt54443Kzc1VeXm5Kisr3f577rnnPO7nP/7jP3To0CHX627duunEiRPKzMxUcXGxWlpaXG3FxcUaOnSoJCkzM1O7d+92te3fv1/9+vVT7969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KC3ktTX2/A50rqlTp5onTpxwvX766afNDRs2mKbJfh9InCYLQqtXr9btt98uSTIMQ8OHD9fatWsDWxTQSQzD/c9QUVGRGhsblZ6eLknKyMhQaWmpysrKAlFeSPv62KPzFRUVqbi42PU6NTVVxcXF7PcBxnHPIFNVVaXDhw/r6quvdk1LS0sjDPnRunXrdODAAX355Zf653/+Z913332BLslSCgoKNGjQILdpqampKioqUkpKSoCqso4TJ05o8eLFOnXqlA4dOqTHH39caWlpgS4rZKxYsULf+c53XK/37t2roUOHst8HGGEoyDgcDvXq1Us2m801zW63q6qqKoBVWcf5f5lNnDhRpmnq3nvvVUZGhoYMGRLo0izD4XAoLi7ObZrdbld1dXWAKrKWgwcP6le/+pUiIiJ08OBBPfbYY/q///s/jiL5SGZmpuvnQ4cOqby8XHPmzNGCBQvY7wOIvTvINDU1tZpmmqYiIyMDUI31PP74466jcjabTTfddJO2bdsW4Kqshd+BwPrtb3+riIgISdKAAQMUERGhw4cPB7iq0FNXV6cVK1boxRdfVFhYGPt9gBGGgkxCQoLq6upkmqZrWn19vRITEwNYlXU4HA6317GxsaqrqwtQNdaUkJCg2tpat2n8DvhHS0tLq6PQ/A74Xl1dnZYvX67Zs2e77txjvw8swlCQSUpKUu/evVVSUuKaVlxcrKFDhwawKms4efKksrKy3C5Y/Oqrr9S3b98AVmU9mZmZ2r17t+u1aZrau3cvpyr94K233tKjjz7qNu2rr77SpZdeGqCKQs+pU6f061//Wo899ph69Ogh6dzfePb7wCIMBRmbzab77rtPGzZskCQ1Nzdr+/btys7ODnBloa979+5KSkpScnKya9q2bdt4xlAnczqdbkdChw8fLpvNptLSUklSYWGhhgwZQijtBF8f+759+7rdvPHll18qPj5effr0CUR5IelXv/qVHnnkEVcQcjgceuedd9jvA8xmXvibgKBgmqZeeOEF2Ww21dXVadSoUbrhhhsCXZYllJaW6uOPP1a3bt1UUVGhwYMHKysrK9BlhSSHw6F3331XL730kq644grdcccduu222xQREaHy8nLl5eVpwIABqqio0M9+9jPFx8cHuuSQ8U1jv3HjRjU0NMjpdOrAgQN66KGHCEM+sm/fPt11111uD7WsqanRrFmzdM8997DfBxBhCAAAWBqnyQAAgKURhgAAgKURhgAAgKURhgAAgKURhgAAgKURhgAAgKURhgB0aVu2bNHAgQP15JNPqrm5WZKUn5+v1NRULV++PMDVAegKeM4QgC5v1KhRWrp0qQYNGuSalpqaqh07dqhnz54BrAxAV8CRIQAAYGmEIQAAYGmEIQAhb+vWrXrmmWf06quv6umnn1ZJSYkk6cyZM8rNzdU999zjmvezzz7Tv/7rv+p//ud/JJ37st6FCxcqIyNDxcXF2rp1q1566SWNGTNGn376aUC2B4BvhQe6AADwhbffflu7d+9uNX337t1av369fv3rX8tms6mhoUFTp07VypUrFR0drfvvv19PPPGEa/5BgwZp5MiRrtcjR47UyJEjtXv3bn3wwQdKTU3VY489pvBw/nwCoYLfZgAh4cYbb3S7gHrevHmSpGXLlmnKlCmy2WySpOjoaI0YMUJr167Vgw8+6HH/NptNtbW1uuGGGyRJP/rRj3xXPICA4jQZgJBWVFSkK6+80m1acnKyV6e4xo4d66uyAAQRwhCAkGaapsLCwtymff21pwyDP5lAKOI3G0BIu/rqq1VeXu427dChQ/re974nSYqMjJTT6XRrP//wRgDWQBgCENIeffRRrVmzxvW6sbFR7733niZPnixJuuSSS1RdXa3GxkZJ0vHjx7V161a1tLQEpF4A/scF1AC6tI0bN+rYsWNas2aNUlJS1KNHD7366quSpFdffVU//vGPdfToUS1atEiJiYk6cuSI5syZI7vdLuncqa9HHnlE9957r5KSktSnTx+NHj1a27dv1/e//31VVlZq//792r9/v/Lz85Wenq4xY8YoLi4ukJsNwIf4Og4AAGBpnCYDAACWRhgCAACWRhgCAACWRhgCAACWRhgCAACWRhgCAACWRhgCAACWRhgCAACWRhgCAACWRhgCAACWRhgCAACW9v8BaaBLtu76OR0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 使用groupby和sum方法统计每个小时数对应的target列中值为1的数量总数\n",
    "hour_target_counts = train_data1.groupby('common_ts_hour')['target'].sum()\n",
    "\n",
    "# 绘制柱状图\n",
    "plt.bar(hour_target_counts.index, hour_target_counts.values)\n",
    "\n",
    "# 设置图表标题和轴标签\n",
    "plt.title('Count of Target=1 by Hour')\n",
    "plt.xlabel('Hour')\n",
    "plt.ylabel('Count of Target=1')\n",
    "\n",
    "# 显示图表\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "0e35b12a",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkoAAAHICAYAAACxs8XXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABR7klEQVR4nO3deVwU9eM/8NfMLrcuLIh44IFUHB5xVBrlgWl5pF2apZhlfbQ0Uz991Pp2aH7KK8u80jKvPLOsPqhpapeVeaWYyuGVwoKCyCWCrOzO7w9+TK4wsiwLs7Cv5+PRI3eO97znvbO7L97znhlBkiQJRERERFSBqHYFiIiIiBwVgxIRERGRAgYlIiIiIgUMSkREREQKGJSIiIiIFDAoERERESlgUCIiIiJSwKBEREREpIBBiYiIiEgBgxLZhclkwqFDh9SuRoORnZ2N06dPq12NekmSJBw8eFDtapCT43diw8GgRACAxMREDB48GAMHDrTpw71s2TKMHz++RnWQJAkbNmzA4sWL0bNnz2qvf+DAATz00EMYMmQI1q5di3nz5uHzzz9HZU/pSUtLQ9euXbF9+/Ya1bmmxo4di5dfftliWmJiIl566aU6+7H/888/cf/99+PPP/+sk+3VtpUrV+KZZ56p9nqbN2/G7NmzsXDhQgwaNAidOnVCaWlpLdRQfYmJiVi+fDk2bdqEV1991erP/Lx58/DMM89g/vz5iIyMxNtvv4133nkH/fv3r+Uaqyc/Px8ffPBBtdezx3diVWbNmoXQ0FB89dVXAICSkhJMmTIF0dHR+OWXX2p1286EQYkAAOHh4ejWrRvuu+8+3HXXXdVe/8UXX6xxHQRBwNNPP42xY8fatP4999yDyMhIDBgwAHFxcZg4cSKuXLmC9957r8Kyvr6+6N69O4KDg22u74kTJ2A2m21eHwBiYmJw7733Wkwrfy/s5dixY7ecHxgYiK5duyIwMNBu21TTyJEj0axZs2qts27dOhw5cgRTpkzBuHHjsGnTJnTu3BlnzpyppVoqq+r9qimj0YgPPvgAI0eOxJNPPomQkBBs2bLFqnVzc3OxYsUKjB8/Hnq9HnFxcZg6dSp69uyJK1eu1Gq9bVGTz2hubi7WrFmDYcOG4fz589Ve3x7fiVWJi4uDh4cHBg0aBABwc3PD448/jjZt2qB79+61vn1noVW7AkS16V//+he6du2KwYMHIyQkRJ7u5eWFd999t0Zlb926FSEhIRBF2//eGDZsWI3qYI34+Hh07NhRcX5AQABmzpxZ6/WoS4IgWL1sbm4uPvjgA2zbtk2eJooiJk2ahMTERIvjpi5U9X7V1JkzZ+Dj4yO30ahRoyrtda1Mt27doNVW/Nl48sknkZ2djcaNG9u1rjVVk8+oXq/H8OHD4ebmht9++60Wakf1BXuUqEFzdXVFZGQkdu7cabcyzWYzDh8+LHd3Oyqj0YhNmzbhxIkTalfFoX3//fcICgpC8+bNLabfcccd6Nu3b53Vo67er4KCAri4uFhMszZY9urVq9LprVq1QlBQUI3rZi/2/IxWFgzJufAIIKtcu3YNn332Gby9veHi4oL09HT06dMH7du3t1jur7/+wu7du5GXl4e8vDy8++670Ol08vxvvvkGJ0+ehE6nw4ULFzB27FgEBATUat0DAwNx6tQp+XV8fDyys7PxwQcfVPqjVFJSgtWrV0On0+HixYvYsGEDnnnmGfmU4I4dO5Cfnw9RFPHFF19AFEUEBQWhS5cuAIBFixYhKSkJBoMBX375JVasWAGDwYBz585hzZo1EAQBx44dw/Hjx/Hll18iLi4Ojz/+eIV6mEwmLF++HNnZ2Th79iwGDBiAhx9+GNeuXcOcOXNw6tQprFmzBkDZ6ZqpU6fKZZWUlODrr79GXl4eLl26hA0bNgAAOnfujHbt2snb2LBhAy5duoRvv/0WP/74Y4U6ZGZmYsmSJQgMDER+fj6aNm2K4cOHAwB27dqFqVOnYv78+di1axe0Wi0MBgMmT55crdN4GzduRFFRETw9PVFQUIBmzZph4MCB1drGtm3b8P3336Nly5bQ6/XVOt1y9OhR3H777ZXOc3Nzk/+9ZMkSGI1GeHh44OLFi3jllVfg4+OD1NRUTJs2DZGRkRg3bhyAsmNk6tSp2Lx5MwIDA7F06VJs2rQJs2bNws6dO+Hi4oLLly/jvffeg4uLi9XvV1Vu9X5lZmbixx9/xLlz5/D333/bvI2qJCUlYceOHfLpz7S0NEyYMAGurq7IysrC559/jr179yI6OhrPPfccNm3ahGPHjqF9+/b497//DaDseN65cyeaN2+OM2fOoFmzZvjmm2/w4YcfIjQ0FACwYsUK5OXlwc3NDbm5uXjllVfk75qqPqNvv/02TCZTpfUfNWoU2rRpY7f2UPpOvHDhAt5++22cPHkSn3zyCUJDQzFnzhx8//33mDJlCh588EG71aEmx+7nn3+OxMRE7N69GwcPHsSaNWuQkZGB33//HRs2bECjRo3sVk+HJRH9fwsWLJBmzZpV6by5c+dK8+bNk19fvnxZevrppy2WiYqKkpYvXy6//uyzz6SZM2fKr/fu3SvNmTNHfn306FHp8ccfr3R7sbGxtuyCNGXKFGnNmjUW0z788EPp2WeftXobS5culY4dOya/Pn36tPTf//630vWvX79eaRmpqanSwIEDpYULF0o5OTlSQUGB9Nprr0lms9liuQULFkibN2+usP6CBQukQYMGSRcvXpQkSZIKCwul2NhY6fLly5IkSVJaWpoUFxdXZVlpaWnSU089VWkdb96Xm5lMJumpp56SDAaDPO29996Ttm3bJr+Oi4uT3nzzTamkpESSJEn67bffpKlTp1a5vXJ79uypcBw98sgjUnFxsdXbOHHihDRkyBDJaDRKkiRJ2dnZUlRUlNV1GDlypDR79uxbLrNq1Srp008/tdjmqFGj5NebN2+WFixYYLFOXFyclJaWJr/u1KmTtHbtWvn1hx9+aNGWkmT9+1UZa94vSZKkffv2SVOmTLFpGzeKjY2VUlJSKky/7777pPPnz8uvly1bJm3atMlima+++kp6/fXXpY8++kgqLS2VEhISpKVLl0qSJElms1kaNGiQ/H7n5ORIQ4YMkQwGgzztq6++ktatWyeXt337dmncuHGV1lHpM2qtzZs3V1q2Nar6TszOzpYefPBB+fXvv/8u7dixw+ry09LSpA4dOkjr16+X/5sxY4b02GOPycvY49g1m81SdHS0tHLlSik1NVWSJEmaPHmydOXKFavrWp/x1BtZpX///hZXtmi1Wly8eNFiGaPRKA8qBIDevXtjx44d8uulS5dazO/UqRNyc3ORlpZWizUvu5quOt3neXl5OHr0qPw6ODgYcXFx1dqmIAg4e/YsevbsCb1ej8aNG2PmzJnVGjvTuXNnubfNy8sL0dHRlfb61JZdu3YhMDAQLVu2lKc9++yzWLx4scVyo0aNgqurKwCgdevW1Rr42r59e4vB+yUlJXBzc8Ply5et3saKFSswaNAg+XSSn58fvL29ra6DJEkVTkXdyGg04rPPPrM4BsLDw1FcXIy//vrL6u3o9XqLMWnVbauq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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 创建图表\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "# 提取common_ts_hour列\n",
    "common_ts_hour = train_data1['common_ts_hour']\n",
    "\n",
    "# 统计每小时下标签的分布\n",
    "label_counts = common_ts_hour.value_counts().sort_index()\n",
    "\n",
    "# 绘制第一个柱状图（标签分布）\n",
    "ax.bar(label_counts.index, label_counts.values, color='orange', label='Label Distribution')\n",
    "\n",
    "# 使用groupby和sum方法统计每个小时数对应的target列中值为1的数量总数\n",
    "hour_target_counts = train_data1.groupby('common_ts_hour')['target'].sum()\n",
    "\n",
    "# 绘制第二个柱状图（Target=1统计）\n",
    "ax.bar(hour_target_counts.index, hour_target_counts.values, color='blue', label='Count of Target=1')\n",
    "\n",
    "# 设置图表标题和轴标签\n",
    "ax.set_title('Label Distribution and Count of Target=1 by Hour')\n",
    "ax.set_xlabel('Hour')\n",
    "ax.set_ylabel('Count')\n",
    "\n",
    "# 添加图例\n",
    "ax.legend()\n",
    "\n",
    "# 显示图表\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62e011da",
   "metadata": {},
   "source": [
    "###### 分析上述可知：小时数target=1的集中分布在 1-15的区间，但直觉告诉我这样不太利于决策树的学习。可能要寻找新的特征。\n",
    "    此外，小时数的数量和其中的target=1的数量直观上看呈现出强相关性。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3ee587e",
   "metadata": {},
   "source": [
    "##### 针对问题4——- 对udmap进行onehot，统计每个key对应的标签均值，绘制直方图。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "7c5f0562",
   "metadata": {},
   "outputs": [],
   "source": [
    "def udmap_onethot(d):\n",
    "    v = np.zeros(9)\n",
    "    if d == 'unknown':\n",
    "        return v\n",
    "    \n",
    "    d = eval(d)\n",
    "    for i in range(1, 10):\n",
    "        if 'key' + str(i) in d:\n",
    "            v[i-1] = d['key' + str(i)]\n",
    "            \n",
    "    return v\n",
    "\n",
    "train_udmap_df1 = pd.DataFrame(np.vstack(train_data1['udmap'].apply(udmap_onethot)))\n",
    "test_udmap_df1 = pd.DataFrame(np.vstack(test_data1['udmap'].apply(udmap_onethot)))\n",
    "\n",
    "train_udmap_df1.columns = ['key' + str(i) for i in range(1, 10)]\n",
    "test_udmap_df1.columns = ['key' + str(i) for i in range(1, 10)]\n",
    "\n",
    "train_data1 = pd.concat([train_data1, train_udmap_df1], axis=1)\n",
    "test_data1 = pd.concat([test_data1, test_udmap_df1], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "fb8c5290",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uuid</th>\n",
       "      <th>eid</th>\n",
       "      <th>udmap</th>\n",
       "      <th>common_ts</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>...</th>\n",
       "      <th>common_ts_hour</th>\n",
       "      <th>key1</th>\n",
       "      <th>key2</th>\n",
       "      <th>key3</th>\n",
       "      <th>key4</th>\n",
       "      <th>key5</th>\n",
       "      <th>key6</th>\n",
       "      <th>key7</th>\n",
       "      <th>key8</th>\n",
       "      <th>key9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-18 09:44:28.244</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>107</td>\n",
       "      <td>206</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"484\"}</td>\n",
       "      <td>2023-07-11 13:42:21.469</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>24</td>\n",
       "      <td>283</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>13</td>\n",
       "      <td>0.0</td>\n",
       "      <td>484.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-15 07:49:53.040</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>41</td>\n",
       "      <td>71</td>\n",
       "      <td>288</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "      <td>unknown</td>\n",
       "      <td>2023-07-16 00:36:55.688</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>17</td>\n",
       "      <td>366</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "      <td>{\"key3\":\"67804\",\"key2\":\"650\"}</td>\n",
       "      <td>2023-07-16 07:15:51.442</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>41</td>\n",
       "      <td>92</td>\n",
       "      <td>383</td>\n",
       "      <td>4</td>\n",
       "      <td>...</td>\n",
       "      <td>7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>650.0</td>\n",
       "      <td>67804.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   uuid  eid                          udmap               common_ts  x1  x2  \\\n",
       "0     0   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-18 09:44:28.244   4   0   \n",
       "1     1   26  {\"key3\":\"67804\",\"key2\":\"484\"} 2023-07-11 13:42:21.469   4   0   \n",
       "2     2    8                        unknown 2023-07-15 07:49:53.040   4   0   \n",
       "3     3   11                        unknown 2023-07-16 00:36:55.688   1   3   \n",
       "4     4   26  {\"key3\":\"67804\",\"key2\":\"650\"} 2023-07-16 07:15:51.442   0   3   \n",
       "\n",
       "   x3   x4   x5  x6  ...  common_ts_hour  key1   key2     key3  key4  key5  \\\n",
       "0  41  107  206   1  ...               9   0.0  650.0  67804.0   0.0   0.0   \n",
       "1  41   24  283   4  ...              13   0.0  484.0  67804.0   0.0   0.0   \n",
       "2  41   71  288   4  ...               7   0.0    0.0      0.0   0.0   0.0   \n",
       "3  41   17  366   1  ...               0   0.0    0.0      0.0   0.0   0.0   \n",
       "4  41   92  383   4  ...               7   0.0  650.0  67804.0   0.0   0.0   \n",
       "\n",
       "   key6  key7  key8  key9  \n",
       "0   0.0   0.0   0.0   0.0  \n",
       "1   0.0   0.0   0.0   0.0  \n",
       "2   0.0   0.0   0.0   0.0  \n",
       "3   0.0   0.0   0.0   0.0  \n",
       "4   0.0   0.0   0.0   0.0  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "db946924",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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FNfj8Wjx4sWy2WyqqalRamqq0tLSzjrP5XJpw4YN2rRpkxwOhx5++OEG+6dNm6b9+/c3GFuyZIkGDBggScrJydErr7yi+Ph4lZaWatasWQoJCfFZXwAAwD9YGpRWrlyp2tpazZs3T263WxkZGUpISFCPHj3OOC8wMFAjR47UiRMnlJOT02h///79tXz58ibnOp1OPfDAA8rKylJsbKzWrVunhQsX6vHHH/dJTwAAwH9Y+ugtKytL6enppwqx2zVkyBCtWrWq2fPt9nMv/4MPPlDv3r0VGxsrSRo2bJiys7NVWVl5zucCAAD+zbKgVFJSosLCQvXp08cYS0xM1O7du31y/pdffllPP/20pk+frnXr1hnjW7duVd++fY3t0NBQxcbGau/evT65LgAA8B+WPXorKipSWFiYbDabMeZwOFRSUtLicx85ckT33nuvunbtqtraWt14441KSUlRt27dVFxcrMTExAbHh4WFqbS0tEXXDAxs/eviAwLsDf5pxbXbgrPV6k+9nM9rtqWfkxl6aZ38qRfJv/rxp15OsywoOZ3ORmMej0dBQUEtPveCBQuMfw8ODtbQoUP1+eef66abbjov17XbbYqICPV6/oXmcLBw/Uz86edjZS/8HFsnemm9/Kkff+rFsqAUHR2t8vJyeTwe465SRUWFsXaoJY4ePaouXboY2+Hh4SorKzOue/rfT2vpdd1ujyoqaryef6EEBNjlcISoouKE6uvdlly7LTjbz8efejkfrPxz5mv00jr5Uy+Sf/XTlnpxOEKadefLsqAUFxenqKgo5eXlKSkpSZKUm5urgQMHtui8+fn5uuGGG7Rz507jI//Hjh1T//79JUkpKSn65JNPjOOrqqpUVlamSy+9tEXXdbla9x+In6uvd7epei80f/r5WNkLP8fWiV5aL3/qx596sewhos1m09SpU5WdnS3p1LuRNm/erIyMDBUUFGj69OkqLCw84zncbrc8Hk+DscjISCUnJxshqa6uTl999ZWuueYaSdKoUaP03XffGWuSNm7cqPT0dN6jBAAAGrH0PUpTpkxRZmamMjMzVV5erhkzZig6OlqFhYXKzc1VSUlJk+9UcrlcWrt2rd566y0VFRUpISFBI0aMUJcuXRQeHq45c+bojTfeUGBgoAoKCjRv3jx16tRJ0qlPuS1ZskSLFi1Sz549dezYMc2ePftCtw4AANoAS4OSzWbTzJkzG42npKRo06ZNpvMCAwM1btw4jRs3rsn9V155pa688krT+UlJSVq0aNG5FwwAANoV//n8HgAAgI8RlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAEwQlAAAAExY+mZuANaz222y220+O9/pb+NuzrdyN5fb7ZHb7Tnrcf7UC4DWgaAEtGN2u03h4R19GgROczh890XT9fVulZXVnDFg+FMvAFoPghLQjtntNgUE2LX4ja90qKjS6nKaFBfbWX+8ZaDsdttZg5K/9HKaL++QnY+7YxJ3yOD/CEoAdKioUgcOl1tdhk/4Sy/n6w6ZL++OSc2/Q+ZPoY9HvO0LQQkAWiF/ukPmT6HP3x7xEvrOjqAEAK2YP9wh87fQ50+9+FPoO18ISgCAC8IfQt9p/tCLP4W+84mgBABAO+YPoe984oWTAAAAJghKAAAAJghKAAAAJghKAAAAJghKAAAAJghKAAAAJghKAAAAJniPUivGq+UBALAWQamV4tXyAABYj6DUSvFqeQAArEdQauV4tTwAANZhMTcAAIAJghIAAIAJghIAAIAJghIAAIAJghIAAIAJghIAAIAJghIAAIAJghIAAIAJghIAAIAJghIAAIAJghIAAIAJghIAAIAJS78U1+PxaPHixbLZbKqpqVFqaqrS0tLOOs/lcmnDhg3atGmTHA6HHn744Qb78/Pz9eGHH8rhcOjw4cOKiorS5MmTJUmHDh3S+PHjddFFFxnHd+3aVW+++aZPewMAAG2fpUFp5cqVqq2t1bx58+R2u5WRkaGEhAT16NHjjPMCAwM1cuRInThxQjk5OY32z507V2+88YYCAgIkSbfffruSk5M1cOBASdKcOXM0fvx43zcEAAD8iqWP3rKyspSenn6qELtdQ4YM0apVq5o9325vXP5PP/2kXbt26ejRo8bYZZddpry8vBbXCwAA2hfL7iiVlJSosLBQffr0McYSExPPKSg1JTIyUitWrFB0dLQx9u2332r48OHG9o8//qhFixapqqpKxcXFmj9/vrp169ai6wIAAP9jWVAqKipSWFiYbDabMeZwOFRSUtLicw8ePNj49507dyo8PFwpKSmSpA4dOujw4cNasGCBbDabtmzZovnz5+vll19u0TUDA317cy4goO2ss29Orf7UD71Yoz31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AAC0Bj5/9BYUFKTS0lJfnxYAAOCCa/aX4krSnj179PHHH6u+vl45OTk6evRog/0ej0dHjx5VQECAT4sEAACwwjkFpeTkZF1yySVauHChIiMj1bNnz4YnCwxUWlqa+vfv78saAQAALHFOQUmSOnXqpIcffljr1q3TuHHjzkdNAAAArYJXa5Q6deqkq6++2te1AAAAtCpeL+bu0aOHL+sAAABodc750dvP5eXlaePGjYqIiNAtt9yiH374QSEhIYqJifFVfQAAAJbx+o7Sxx9/rLlz50qSioqKJEm9evXS9u3btXXrVt9UBwAAYCGvg9Inn3yiNWvW6J577lG3bt2M8RtuuEFffPGFT4oDAACwktdBKSYmxnhfks1ma7CvoqKiZVUBAAC0Al4HpWPHjsnpdDYaP3TokPEoDgAAoC3zejH3rbfeqt///vdKTk5WYWGhqqqqdODAAe3atUuZmZm+rBEAAMASXt9R6tWrl1588UX17t1bsbGxKikpUf/+/fX2228rMTHRlzUCAABYokWvBwgMDNTYsWM1duxYX9UDAADQanh9R2nmzJk6ePBgo/G6ujp9+OGH+vbbb1tUGAAAgNW8vqMUGhqq77//Xh9++KEGDx5sPG6bM2eOKisrFRMTo6uvvlq/+c1vfFYsAADAheT1HSWHw6EvvvhCISEhWrFihb788ku53W5t3rxZL7zwgp544gkdOXLEl7UCAABcUF7fUXI4HLrjjjskSb/97W/1+uuvq0uXLrrkkktkt5/KX507d/ZNlQAAABbw+o5SaGhoo7EffvhBPXv2NLabes8SAABAW+H1HaXjx4/r9ddfV69evbRp0yYFBATo+++/V3l5uSTJ5XI1udgbAACgrfD6jtIf/vAHhYSE6B//+Id+9atf6cYbb1RMTIz+8Ic/KD09XePHj9f111/vy1oBAAAuKK/vKNlsNt1444268cYbjbGEhARJ0urVq+XxeBQcHNzyCgEAACzidVD68ccf5fF41L1790b7goKCWlQUAABAa+D1o7epU6fqtdde82UtAAAArYrXd5RuuOEG3X///U3uc7lcCgxs0bejAAAAWM7rO0o9e/bUnj17mtz39ttve10QAABAa+F1UPrVr36l3bt3669//asqKipUVVVl/O/HH3/0ZY0AAACW8Pr52FVXXaUuXbpIkl566SVJpz4J5/F4VFpaqhkzZpz1HB6PR4sXL5bNZlNNTY1SU1OVlpbWrOtnZ2dr+/btioiIUMeOHXXnnXca+4YOHara2lqFhIRIkmprazVt2jTdcccdOnTokMaPH6+LLrrIOL5r16568803m9s6AABoJ7wOShMnTtS8efOa3Pfqq6826xwrV65UbW2t5s2bJ7fbrYyMDCUkJKhHjx5nnJeXl6dXX31Va9askd1u1/z587Vu3TqNGjVKx48f1/Dhw/Xoo4/KZrNJkp577jlNmjTJmD9nzhyNHz++mZ0CAID2yutHb3379jXdd7agc1pWVpbS09NPFWK3a8iQIVq1atVZ561cuVIjR440vlNuxIgRRjirr6/X3XffbYSkffv2KS4uTh07dmxWTQAAAKd5fUdp7NixTY5/+eWXuvzyy886v6SkRIWFherTp48xlpiY2KygtG3bNo0ZM6bBvJycHDmdTl188cUNjl25cmWjO18//vijFi1apKqqKhUXF2v+/Pnq1q3bWa97JoGBXmfOJgUE+PZ851NzavWnfujFGu2pl+Ye01q0p98NvVjDylp9/hn+lJQULViwQP/+7/9+xuOKiooUFhZm3PmRJIfDoZKSkrNeo6ioSBEREcZ2WFiYXC6XysrKFBMTY4x/8803iomJUYcOHYyxDh066PDhw1qwYIFsNpu2bNmi+fPn6+WXXz6XNhuw222KiGj8JcHthcMRYnUJPuVP/dBL6+RPvUj+1Q+9tE5W9uJ1UPr888+1cOFCVVVVyeVyKTg4WB6PRydPntTQoUPPOt/pdDYa83g8zXqrd11dXaN5UuM3gr/yyiu65557GozFxsZq4cKFxvbgwYP14IMPyul0ev1Gcbfbo4qKGq/mmgkIsLeZP+QVFSdUX+8+4zH+1A+9WKM99SL5Vz/0Yo321Is3HI6QZt2p8joo7dy5U9nZ2Tpx4oQ2bNhgLI4uKSnRRx99dNb50dHRKi8vl8fjMe4qVVRUKDY2tllzjx8/bmyXl5crODhY4eHhxlh1dbW2bt2qZ555psHc2tpa1dTUNLgj5XA4VFlZqaioqLNe24zL5dtfYFtSX+/2q/79qR96aZ38qRfJv/qhl9bJyl68fuh38cUXy263KzQ0VD/99JMxfjoAnU1cXJyioqKUl5dnjOXm5mrgwIFnnZuSktLgZZd5eXmN5n311VcKCwtrNHfZsmV67LHHGoxVV1crMjLyrNcFAADti9dB6eePzsrLy3XixAlj2+0+e+qz2WyaOnWqsrOzJZ362pPNmzcrIyNDBQUFmj59ugoLC5ucO3nyZL333nvGI7f333+/wcf/JSk/P1+1tbWN5nbv3r3BAvItW7YoNTW1wVopAAAAqQWP3lwul2bPnq2JEyfq+uuv11133aW7775bVVVVysnJadY5pkyZoszMTGVmZqq8vFwzZsxQdHS0CgsLlZubq5KSkiZfNdCvXz9NmjRJjz76qBwOh+Lj4zV8+PAGxzgcjgYLu0+bMGGC1qxZo1WrVqm+vl4HDx7U3LlzvfshAAAAv+Z1UJo6dapWr16tiy++WN27d9e0adP0l7/8RR6PR48++mizzmGz2TRz5sxG4ykpKdq0adMZ544ePVqjR4823T9+/PgmXypps9k0YcKEZtUHAADat2YHpbVr1+r7779XSkqKhg4dKpvNpn/7t38z9qempio1NfW8FAkAAGCFZgel1157TcuXL5fD4Tif9QAAALQazV7MnZqa2uyQ9O6773pdEAAAQGvR7DtK69at03fffdesY7/55hvdcMMNXhcFAADQGjQ7KMXHxystLa1Zx548edLbegAAAFqNZgelXr16ady4cc06tnfv3l4XBAAA0Fo0e41Sdna2/va3vzX5HW3/7IorrmhRUQAAAK1Bs4PSxx9/rF69eunLL788n/UAAAC0Gs1+9BYcHNys72EDAADwF15/1xsAAIC/IygBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYICgBAACYCLTy4h6PR4sXL5bNZlNNTY1SU1OVlpbWrLnZ2dnavn27IiIi1LFjR915553GvmnTpmn//v0Njl+yZIkGDBggScrJydErr7yi+Ph4lZaWatasWQoJCfFZXwAAwD9YGpRWrlyp2tpazZs3T263WxkZGUpISFCPHj3OOC8vL0+vvvqq1qxZI7vdrvnz52vdunUaNWqUJKl///5avnx5k3OdTqce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tbWqqalpcEfK4XCosrJSUVFRXvfjcvn2F9iW1Ne7/ap/f+qHXlonf+pF8q9+6KV1srIXyx76xcXFKSoqqsEi69zcXOOTaWeSkpKiPXv2GNt5eXkN5pWWlur111/XfffdZ4Sk3NxcSdKyZcv02GOPNThfdXW1IiMjW9QPAADwP5YFJZvNpqlTpyo7O1uS5HK5tHnzZmVkZKigoEDTp09XYWFhk3MnT56s9957z3jk9v7772vSpEnGeV588UXdf//9xusB9u3bpx07dkiSunfv3mAB+ZYtW5SamtpgrRQAAIBk8XuUpkyZoszMTGVmZqq8vFwzZsxQdHS0CgsLlZubq5KSkibfqdSvXz9NmjRJjz76qBwOh+Lj441PtW3atEnvvPOONmzYYBx/7NgxPffcc5KkCRMmaM2aNVq1apXq6+t18OBBzZ0798I0DAAA2hRLg5LNZtPMmTMbjaekpGjTpk1nnDt69GiNHj260XhaWpq+/PLLM15zwoQJ514sAABod9rOSxQAAAAuMIISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACACYISAACAiUArL+7xeLR48WLZbDbV1NQoNTVVaWlpzZqbnZ2t7du3KyIiQh07dtSdd95p7KutrdWCBQsUGRmp0tJS3XTTTerXr5+xPycnR6+88ori4+NVWlqqWbNmKSQkxNftAQCANs7SoLRy5UrV1tZq3rx5crvdysjIUEJCgnr06HHGeXl5eXr11Ve1Zs0a2e12zZ8/X+vWrdOoUaMkSUuWLFF8fLymTJmi6upqZWRkaM2aNerUqZOcTqceeOABZWVlKTY2VuvWrdPChQv1+OOPX4iWAQBAG2Lpo7esrCylp6efKsRu15AhQ7Rq1aqzzlu5cqVGjhwpu/1U+SNGjNCrr74qSTp58qTefvttjRkzRpIUGhqqxMREZWdnS5I++OAD9e7dW7GxsZKkYcOGKTs7W5WVlb5uDwAAtHGW3VEqKSlRYWGh+vTpY4wlJiY2Kyht27bNCEKn5+Xk5MjpdCovL0+dO3dWZGRkg/27d+/WxIkTtXXrVvXt29fYFxoaqtjYWO3du1eDBg3yqhe73abIyFCv5pqx2U7989Hpg+Wqd/v03L4SGHAqqIaFhcjjOfOx/tQPvVxY7bEXyb/6oZcLqz324g273da8Gnx72eYrKipSWFiYbLb/K9ThcKikpKRZcyMiIoztsLAwuVwulZWVNdp3+rylpaWSpOLiYiUmJjbYHxYWZuz3hs1mU0BA837g5yq8c/B5Oa8vnb6z1xz+1A+9XFjtsRfJv/qhlwurPfZyXq5t1YWdTmejMY/Ho6CgoLPOraurazRPkoKCgkzP26FDhxZfFwAAtC+WBaXo6GiVl5cbIUeSKioqjLVDZ5t7/PhxY7u8vFzBwcEKDw9XdHS0ysrKGhz/8/OebT8AAMBplgWluLg4RUVFKS8vzxjLzc3VwIEDzzo3JSVFe/bsMbbz8vKMecnJySopKWkQpH5+3n+eW1VVpbKyMl166aUt7gkAAPgXy4KSzWbT1KlTjU+juVwubd68WRkZGSooKND06dNVWFjY5NzJkyfrvffeM+5Gvf/++5o0aZIkqVOnTsrIyND69eslnQpC+/fv169//WtJ0qhRo/Tdd98Za5I2btyo9PR03qMEAAAasXk8vl5H3nwej0eZmZmy2WwqLy/Xtddeq2uuuUY7duzQfffdp6VLlyolJaXJuWvXrtX27dvlcDjUuXNn3XHHHca+2tpaPfXUU4qIiFBRUZF++9vfNvikW25urlasWKGePXvq2LFjmj17ti666KLz3i8AAGhbLA1KAAAArRnf9QYAAGCCoAQAAGCCoAQAAGCCoAQAAGCCoAQAAGCCoAQAAGCCoAQAAGCCoAQAAGAi0OoCcGEUFRXpiy++0FtvvaVJkybp+uuvt7okrxUXF+udd95RRESEiouL5XQ69cADD8hms1ld2jk7cOCAPvnkEwUHB+vAgQP65S9/qWHDhlldVov953/+p4KCgjRt2jSrS/HaI488os8++6zB2MMPP6zf/OY3FlXUMhs3blRBQYE6duyoTz/9VI899lib/DLw3/72t9q3b586d+4sSaqvr9eIESP02GOPWVzZudu3b5/WrVunbt266cSJE6qrq9Mdd9zRJv9bJkk7duzQxo0b1b17dxUXF2vgwIFKTU21uqwWIyi1E7GxsRo7dqw+//xztfWXsc+ePVvPPfecOnXqJEn605/+pHXr1mn06NEWV3buHnnkET399NPq1auX6urqNGrUKPXr109RUVFWl+a13NxcffDBBxo5cqTVpbRIly5d9Omnn1pdhk98/vnnOnLkiG6//XZJp74Ds6qqqk0Gpe7duysrK0sdOnSQJP33f/93mwyvHo9HjzzyiF5//XXjK7ReeOEFvf3228rIyLC4unNXXl6uJ554QqtXr1Zg4Klocddddyk+Pl49evSwuLqW4dFbO2O3t/1f+a5du5Sbm2tsX3bZZQ2225IRI0YYv5MOHTooJiZGRUVFFlflPafTqY8//tgv7or5k6VLl2rs2LHG9h133KGEhAQLK/JObW2t7r77biMklZaWyuVytcnAd/z4cVVWVio4ONgYS0pKarP/LduxY4cuvfRSIyRJ0v/7f/9P//M//2NhVb7BHSW0OcuXL9cvfvELY/vbb7/VwIEDLazIe6f/hi9J+fn5CgwMVGJiooUVtcybb76pm2++WVlZWVaX4hNr1qxRfn6+fvjhB/3rv/6rpk6danVJ56yiokI//PCDdu/erQ0bNqi6ulo2m00LFy5s8H/SbUFwcHCDgPff//3fuu222yysyHuRkZGKiYnRn/70Jz3yyCMKDg7WZ5991mbvxHo8HjmdzgZjTqdT+/bts6gi32n7txfQ7qSkpMjhcEiSDh48qEOHDumGG26wuCrv1dfXa9GiRZo9e7YeffTRNnvXb9euXYqPj1d4eLjVpfhEbW2tLr/8cs2ePVvLli3TRx99pF27dlld1jk7ePCg6urqlJeXpyeeeELPPPOM8fiqLSsqKlJVVZUiIyOtLsVrzz//vL7//nuNGDFC9913n6677jqlpKRYXZZX+vfvrx07dujQoUOSpLy8PH322Wc6ceKExZW1XNv8LzKgU8/Ely9frmeffVYBAQFWl+O1gIAAzZo1Sy+++KJmz56tAwcOWF3SOTtx4oR27NihoUOHWl2Kz/zxj39Unz59JEk2m03XXXed/vGPf1hc1bk7efKkbDabJk+ebIyNGTNGGzdutLCqlsvKymrzj3hP34F96aWXVF5ermeffVbV1dVWl+WVyMhILV26VC+88IIWLVqkvLw8DRkyRNHR0VaX1mIEJbRJ5eXleuGFFzR79mxjUXdbFxkZqeHDh2v58uVWl3LOvvzyS3Xu3Fnr16/X+vXrtX//fuXm5mr9+vWqq6uzujyv/PNasfDwcJWXl1tUjfc6deqk+vp6BQUFGWMRERGqqKiwsKqW+/vf/64BAwZYXYbX8vPztX37dt1www1KTEzUihUrdPHFF+vFF1+0ujSv9evXT0888YRmzZql9PR0FRcXKy4uzuqyWoyghDanpqZGzz//vO6991517NhRktrsAsj77rtPBw8eNLYvuugiVVZWWliRd1JTU3XTTTdp5MiRGjlypP7lX/5FSUlJGjlypLHwti2prq7W8OHDG9zdO3bsmLp162ZhVd6Jj4+X2+3W4cOHjbGKioo22ctpBw4cUHl5ufEIvi369ttvG6y3stvtuvnmm/Xtt99aWFXL/PTTT6qvrze2v/nmmza9LOI0glI743a72/zrAZYtW6a77rrLCElFRUX68MMPLa7q3Lndbm3btq3BHZcvv/yyTX7U2d+EhIQoLi5O8fHxxtg//vGPNvm7CQ4O1tixY7V69WpjbPv27Ro3bpyFVbVMfn6+amtrrS6jRfr376+8vLwG/z3+7rvvNHjwYAurapnbb79dGzZskHRqzWK3bt3a5Kcr/5nN09b/XxPNUlRUpI8//ljPPfecevXqpXHjxmns2LFt7m/7+/fv17/92781eNx2/PhxzZo1S7feequFlXln165d+uyzzxQZGanS0lLFxMTo5ptvtrosr7lcLq1bt06vvfaaAgMDNWXKlDb7N8p9+/Zp69atuuiii3T48GH169dPw4cPt7osr5w8eVILFixQdHS0oqKi5Ha7dcstt7TZFxtu2bJFc+fObZNrxn5u586d+uyzzxQdHa3a2lrV19frtttua7O/lzVr1uiLL77QgAEDdPToUd11111+sTSCoAQAAGCCR28AAAAmCEoAAAAmCEoAAAAmCEoAAAAmCEoAAAAmCEoAAAAmCEoA2pVt27bp+uuv1+9+9zsdOHBAx48f18yZM3Xdddfpk08+sbo8AK1MoNUFAMCFdNVVV2nAgAFKTk423hocGxurWbNmKTY21uLqALQ23FEC0K5t3bpVycnJhCQATSIoAWi3Tp48qc8++6zNfs0KgPOPoASg3Vq6dKnS0tIajRcUFOjPf/6zli1bpj/96U8NvlPs448/1tChQ3XffffJ6XQqPz9fEydO1P3336+CgoILVzyAC4I1SgDapb179+rbb79VRUWFrrzySmO8rq5Ojz/+uJYtW6aQkBC5XC5NmDBBXbp0UVJSktLS0nT77berqqpKQUFB6t27ty6//HLNmjVLQUFBFnYE4HzgjhKAdunw4cN6/vnn9d5776msrMwYX79+vZKTkxUSEiJJCgwM1LXXXqsPPvjAOGb06NHGdl1dnQIDAwlJgJ/ijhKAdum6665TbGysrrnmGq1evVp33HGHJCkvL09Hjx7VX//6V+PYkydPqkuXLsZ2VFSUunbtqv3796u4uFhDhgy54PUDuDAISgDatVtvvVUPPvigpk2bpoCAAHk8HvXp00c333zzGeeNGzdO7777rjwej+65554LVC2AC41HbwDatQEDBigyMlIbN26UJPXu3Vv5+fkNjvF4PI0Wag8bNkybNm2SdOrxHAD/RFAC0O7deuuteu211ySdWn+0c+dOFRYWGvvfffddY83SaUFBQerXr59SUlIuaK0ALiz+GgSgXdm2bZt27typI0eOaPDgwUpISNDx48e1fft2LViwQHPnztUzzzyjp556SjExMXI4HBo0aFCTL6Ts1KmTBg8ebEEXAC4Um8fj8VhdBAC0FR6PR7m5ubrkkku0YsUK/eEPf7C6JADnEUEJAM5BUVGRxowZo3/913/VE088ofDwcKtLAnAeEZQAAABMsJgbAADABEEJAADABEEJAADABEEJAADABEEJAADABEEJAADABEEJAADABEEJAADABEEJAADAxP8HVaYt3tdBb6AAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 初始化空列表来存储每个key对应的target均值\n",
    "key_target_means = []\n",
    "\n",
    "# 遍历key1到key9列，计算每个key对应的target均值\n",
    "for i in range(1, 10):\n",
    "    key = f'key{i}'\n",
    "    key_target_mean = train_data1.groupby(key)['target'].mean()\n",
    "    key_target_means.append(key_target_mean)\n",
    "\n",
    "plt.bar(range(1,10), [mean[0] for mean in key_target_means])\n",
    "plt.xticks(range(1,10))\n",
    "plt.ylabel('Target Mean')\n",
    "plt.xlabel('Key')\n",
    "plt.title('Target Mean by Key')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9de43d61",
   "metadata": {},
   "source": [
    "###### 上图可知，均值差异不大，很难进行信息熵的增益，也因此这个特征不太好。\n",
    "    后续还看看统计每个key对应的target数量。\n",
    "    综上所述：特征x7,x8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "78441649",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c0f6ab45",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e65626ad",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f896b18c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3450e83c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e29b8cf1",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "07deac6d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6298a39f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1bf68219",
   "metadata": {},
   "outputs": [],
   "source": [
    "-i  http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
